我希望将内容上传到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();
答案 0 :(得分:1)
根据您的使用情况,您有多种选择。
查看客户端库中的import api。它实际上是一种可用于从文件系统导入文件夹结构的方法。它处理所有文件夹创建和内部上传:
await Importer.ImportAsync(sourcePath, targetPath, options);
options对象可用于自定义算法的行为(例如,大型结构的最大并行度,定义自定义容器类型而不是默认文件夹或定义可选的日志记录委托方法)。
此方法具有可扩展性,这意味着它能够有效地导入大量文件夹和文件。它将在导入每个文件夹和文件后返回(由options参数中的可选过滤器过滤)。
创建父文件夹有一种方法(如果它们尚不存在)。
await Tools.EnsurePathAsync(path);
您可以使用不存在的路径(例如/ Root / Folder1 / Folder2)调用它,它将为您创建它。此方法仅处理文件夹,它与文件无关。