【问题标题】:SPO & CSOM & Can't upload a document to a document library, but I can create a folderSPO & CSOM & 无法将文档上传到文档库,但我可以创建文件夹
【发布时间】:2020-04-01 13:09:07
【问题描述】:

我在尝试将文档上传到文档库时遇到列表视图阈值问题。让我告诉你背后的故事。

  • 我的网站在 SPO 上,我正在使用 CSOM 创建一个文件夹,然后将上传的文档添加到该文件夹​​中。
  • 我用来向 SPO 进行身份验证的服务帐户是网站集管理员。
  • 我的 CSOM 代码可以创建文件夹,但无法将文档上传到该文件夹​​,因为 SharePoint 说我们已达到列表视图阈值。

  • 我们尝试将文档上传到的文档库中包含超过 20K 项。

  • 我们使用的默认视图只选择了一列,我们为 Title 和 Created 字段编制索引,并且文档库使用现代体验。

一段时间以来,我们一直在使用相同的代码,但截至 2019 年 10 月,一切都停止了。

有什么想法吗?下面提供的是我正在使用的代码 使用 (ClientContext ctx = new ClientContext(SPUrl)) { ctx.Credentials = new SharePointOnlineCredentials(spuser, securePassword);

                            Web webSite = ctx.Web;
                            ctx.Load(webSite);
                            ctx.ExecuteQuery();
                            List list = ctx.Web.Lists.GetByTitle("TempDoc");
                            ctx.Load(list);
                            var lst = ctx.Web.Lists.GetByTitle("TempDoc");
                            var fld1 = lst.RootFolder.Folders.Add(FolderName);
                            fld1.Update();
                            ctx.ExecuteQuery();
                            foldersatus = true;



                            try
                            {
                                int FileLen;
                                FileLen = Request.Files[upload].ContentLength;
                                byte[] input = new byte[FileLen];
                                System.IO.Stream fileStream;
                                // Initialize the stream.
                                fileStream = Request.Files[upload].InputStream;
                                // Read the file into the byte array.
                                fileStream.Read(input, 0, FileLen);


                                FileCreationInformation newFile = new FileCreationInformation();

                                newFile.Content = input;
                                newFile.Url = filename;
                                List docs = webSite.Lists.GetByTitle("TempDoc");
                                ctx.Load(docs.RootFolder);
                                ctx.Load(docs.RootFolder.Folders);
                                Microsoft.SharePoint.Client.File uploadFile1 = docs.RootFolder.Folders[0].Files.Add(newFile);
                                ctx.ExecuteQuery(); }

【问题讨论】:

    标签: sharepoint sharepoint-online csom


    【解决方案1】:

    我的示例测试代码(该库有超过 10k 个文件)。

    List docs = context.Web.Lists.GetByTitle("largeLib1");                    
                    var filePath = @"C:\Lee\template.xlsx";
                    using (FileStream fs = new FileStream(filePath, FileMode.Open))
                    {                        
                        FileCreationInformation flciNewFile = new FileCreationInformation();
    
                        flciNewFile.ContentStream = fs;
                        flciNewFile.Url = System.IO.Path.GetFileName(filePath);
                        flciNewFile.Overwrite = true;                    
                        Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(flciNewFile);
                        context.Load(uploadFile);
                        context.ExecuteQuery();
                    } 
    

    或者(文件夹有超过10k个文件)

    Folder folder = context.Web.GetFolderByServerRelativeUrl("/sites/xxx/largeLib1/set2");
                    var filePath = @"C:\Lee\template.xlsx";
                    using (FileStream fs = new FileStream(filePath, FileMode.Open))
                    {                        
                        FileCreationInformation flciNewFile = new FileCreationInformation();
    
                        flciNewFile.ContentStream = fs;
                        flciNewFile.Url = System.IO.Path.GetFileName(filePath);
                        flciNewFile.Overwrite = true;                    
                        Microsoft.SharePoint.Client.File uploadFile = folder.Files.Add(flciNewFile);
                        context.Load(uploadFile);
                        context.ExecuteQuery();
                    } 
    

    【讨论】:

    • 我发现了问题。问题是调用 ctx.Load(docs.RootFolder.Folders);我已经删除了这段代码,我现在可以上传文件了。
    【解决方案2】:

    我发现了问题。问题是调用 ctx.Load(docs.RootFolder.Folders);我已经删除了这段代码,我现在可以上传文件了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      相关资源
      最近更新 更多