0

我想将内容上传到 sensenet 上的特定路径。此路径可能尚未在 sensenet 上创建。因此,如果路径不存在,系统必须创建它。

使用 Sensenet 的客户端 API,可用于创建内容的方法运行异步。我试图强制它运行同步但它似乎没有发生,因为有时没有创建第二个文件夹......

这是一个示例代码:

private async Task CreateFolder(String parentPath, String folderName){
 var folder = Content.CreateNew(parentPath, "Folder", folderName);
 await folder.SaveAsync();
}

CreateFolder("/Root/Sites/Test/DocumentWorkSpace", "folder").Wait();
CreateFolder("/Root/Sites/Test/DocumentWorkSpace/folder", "subfolder").Wait();

我可以使用 Tools.EnsurePathAsync(path) 创建文件夹结构。但在此之后,我想上传文件......(我遇到了与上面报告的文件夹结构相同的问题。)

Task.Run(() => Tools.EnsurePathAsync(pathDocType)).Wait();

Task.Run(() =>{
    var stream = new MemoryStream(byteContent);
    Content.UploadAsync(pathDocType, "test.doc", stream).WaitAndUnwrapException();
    stream.Dispose();
}).Wait();
4

1 回答 1

1

您有多种选择,具体取决于您的用例。

导入整个文件夹结构

看一下客户端库中的import api。它实际上是一种可用于从文件系统导入文件夹结构的方法。它在内部处理所有文件夹的创建和上传:

await Importer.ImportAsync(sourcePath, targetPath, options);

选项对象可用于自定义算法的行为(例如,大型结构的最大并行度,定义自定义容器类型而不是默认文件夹或定义可选的日志记录委托方法)。

这种方法是可扩展的,这意味着它能够有效地导入大量文件夹和文件。它将在导入每个文件夹和文件后返回(由 options 参数中的可选过滤器过滤)。

确保父文件夹链

有一种创建父文件夹的方法(如果它们尚不存在)。

await Tools.EnsurePathAsync(path);

您可以使用不存在的路径(例如/Root/Folder1/Folder2)调用它,它会为您创建它。此方法只处理文件夹,与文件无关。

于 2017-05-30T19:52:18.510 回答