Sensenet:通过版本6.5的sensenet客户端API上传文件无法正常工作

时间:2017-05-02 09:55:32

标签: sensenet

我安装了SenseNet 6.5版(来自codeplex的代码)。想要使用Sensenet Client API上传内容存储库中的文件,遗憾的是它无法使用批量上传。

    string [] fileEntries = Directory.GetFiles(@"C:\Users\conyna\Downloads\Chirag");

             foreach (string fileName in fileEntries)
             {
                 using (Stream fs = File.OpenRead(fileName))
                 {
                     string fn = Path.GetFileName(fileName);

                     Task<SenseNet.Client.Content> x =   SenseNet.Client.Content.UploadAsync("/Root/Sites/Default_Site/workspaces/(apps)/DocumentLibrary", fn, fs);
                 }
             }

2 个答案:

答案 0 :(得分:2)

上述代码存在两个问题:

  1. 您必须'等待'才能使用异步方法。目前,您使用 UploadAsync 方法启动任务,但是您不必等待它完成,这会导致问题,因为在启动上载任务后文件流会立即关闭。请以异步方式上传文件(当然,您也必须使您的调用方法异步,但这是使用异步api的重点):
  2. await Content.UploadAsync(...)
    

    您也可以考虑在客户端使用导入器类,它可以导入完整的目录结构。

    1. 您正在尝试上传到(apps)文件夹,该文件夹不是正确的目标,旨在包含应用程序(主要是页面)。如果您上传到工作区中的文档库中会更好,例如:
    2. /根/站点/ Default_Site /工作区/文档/ SampleWorkspace / DocumentLibrary

答案 1 :(得分:1)

我们使用SN ClientLibrary创建了一个小应用程序。我想,你可以使用这个应用程序/信息/代码。

此应用程序可以通过Client Libray上传整个文件夹。请查看我的Github存储库:https://github.com/marosvolgyiz/SNClientLibraryUploader

有相关的上传方法:

public async Task Upload()
        {
            try
            {
                Console.WriteLine("Initilization...");
                ClientContext.Initialize(new[] { sctx });

                Console.WriteLine("Upload Started");
                //Is Parent exists
                var content = await Content.LoadAsync(Target);
                if (content != null)
                {
                    //Uploading files
                    var tasks = new List<Task>();
                    foreach (var file in Files)
                    {
                        string fileTargetFolder = Target + file.DirectoryName.Replace(Source, "").Replace(BaseDirectory, "").Replace("\\", "/");
                        var fileTargetContentFolder = await Content.LoadAsync(fileTargetFolder);
                        if (fileTargetContentFolder == null)
                        {
                            if (CreateFolderPath(Target, file.DirectoryName.Replace(Source, "")))
                            {
                                fileTargetContentFolder = await Content.LoadAsync(fileTargetFolder);
                                Console.WriteLine("#Upload file: " + file.FullName);
                                tasks.Add(Content.UploadAsync(fileTargetContentFolder.Id, file.Name, file.OpenRead()));
                                LoggerClass.LogToCSV("File uploaded", file.Name);
                            }
                            else
                            {
                                LoggerClass.LogToCSV("File target folder does not exist or you do not have enough permission to see! File can not be uploaded. ", file.Name);
                            }
                        }
                        else
                        {
                            Console.WriteLine("#Upload file: " + file.FullName);
                            tasks.Add(Content.UploadAsync(fileTargetContentFolder.Id, file.Name, file.OpenRead()));
                            LoggerClass.LogToCSV("File uploaded", file.Name);
                        }
                    }
                    await Task.WhenAll(tasks);
                }
                else
                {
                    Console.WriteLine("Target does not exist or you do not have enough permission to see!");
                    LoggerClass.LogToCSV("Target does not exist or you do not have enough permission to see!");
                }
                Console.WriteLine("Upload finished.");
            }
            catch (Exception ex)
            {
                LoggerClass.LogToCSV(ex.Message);
            }
        }

我希望我的回答对你有所帮助。

BR, 人:Maros