代码之家  ›  专栏  ›  技术社区  ›  Brandon Michael Hunter

SPO&CSOM&无法将文档上载到文档库,但我可以创建文件夹

  •  0
  • Brandon Michael Hunter  · 技术社区  · 6 年前

    尝试将文档上载到文档库时,出现列表视图阈值问题。让我给你讲讲后面的故事。

    • 我用来验证SPO的服务帐户是一个网站集管理员。
    • 我的CSOM代码可以创建文件夹,但无法将文档上载到该文件夹,因为SharePoint说我们已达到列表视图阈值。

    • 我们正在尝试将文档上载到的文档库中有超过20000个项目。

    • 我们使用的默认视图只选择了一个列,我们对Title和Created字段进行了索引,文档库使用了现代经验。

    我们使用相同的代码已经有一段时间了,但从2019年10月起,一切都停止了。

    有什么想法吗?下面是我正在使用的代码 { ctx.Credentials=新的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(); }
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Lee    6 年前

    我的示例测试代码(lib有超过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();
                    } 
    
        2
  •  0
  •   Brandon Michael Hunter    6 年前

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

    推荐文章