2017-08-02 48 views
0

在尝试上传文件到SharePoint联机时,通过SharePointClientupload远程上传文件时,遇到的文件大小限制为2mb。在我的搜索中,似乎人们已经用PowerShell来克服这个限制,但是有没有办法在.Net C#中使用原生SharePointClient包来克服这个限制?这里是我现有的代码示例:SharePoint Online,使用SharePointClient上传超过2mb的文件

using (var ctx = new Microsoft.SharePoint.Client.ClientContext(httpUrl)) 
    { 
     ctx.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials(username, passWord); 
     try 
     { 
      string uploadFilename = string.Format(@"{0}.{1}", string.IsNullOrWhiteSpace(filename) ? submissionId : filename, formatExtension); 
      logger.Info(string.Format("SharePoint uploading: {0}", uploadFilename)); 
      new SharePointClient().Upload(ctx, sharePointDirectoryPath, uploadFilename, formatData); 
     } 
    } 

我从下面的网站,你可以使用ContentStream只是不知道如何映射到SharePointClient(如果有的话)阅读:

https://msdn.microsoft.com/en-us/pnp_articles/upload-large-files-sample-app-for-sharepoint

UPDATE:

每建议的解决方案我现在有:

public void UploadDocumentContentStream(ClientContext ctx, string libraryName, string filePath) 
{ 

    Web web = ctx.Web; 

    using (FileStream fs = new FileStream(filePath, FileMode.Open)) 
    { 
     FileCreationInformation flciNewFile = new FileCreationInformation(); 

     // This is the key difference for the first case - using ContentStream property 
     flciNewFile.ContentStream = fs; 
     flciNewFile.Url = System.IO.Path.GetFileName(filePath); 
     flciNewFile.Overwrite = true; 

     List docs = web.Lists.GetByTitle(libraryName); 
     Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(flciNewFile); 

     ctx.Load(uploadFile); 
     ctx.ExecuteQuery(); 
    } 
} 

仍然不能正常工作,但会在成功时再次更新。当前错误是:

Could not find file 'F:approot12-09-2017.zip'. 

FINALLY

我正在使用的文件从Amazon S3这样的解决办法是把我的字节数据和流式传输到呼叫:

public void UploadDocumentContentStream(ClientContext ctx, string libraryName, string filename, byte[] data) 
{ 

    Web web = ctx.Web; 
    FileCreationInformation flciNewFile = new FileCreationInformation(); 
    flciNewFile.ContentStream = new MemoryStream(data); ; 
    flciNewFile.Url = filename; 
    flciNewFile.Overwrite = true; 
    List docs = web.Lists.GetByTitle(libraryName); 
    Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(flciNewFile); 
    ctx.Load(uploadFile); 
    ctx.ExecuteQuery(); 

} 

回答

1

你可以使用FileCreationInformation创建一个新文件并通过FileStream提供内容。然后可以将该文件添加到目标库。这应该可以帮助你获得约2mb的限制,你遇到你正在使用的上传方法。下面的例子:

FileCreationInformation newFile = new FileCreationInformation 
{ 
    Url = fileName, 
    Overwrite = false, 
    ContentStream = new FileStream(fileSourcePath, FileMode.Open) 
}; 

var createdFile = list.RootFolder.Files.Add(newFile); 
ctx.Load(createdFile); 
ctx.ExecuteQuery(); 

在这个例子中的目标库是list,你将需要得到参考这个第一。如果需要,我可以告诉你如何做到这一点。

+0

谢谢!我明天会试一试,让你知道它是如何发展的。 –

+0

有一点需要记住,30分钟后用这种方法发生超时。微软的指导是使用文件流上传文件高达10MB,但你可以逃避更多。如果您仍然遇到问题,请告知我,我将为“开始”,“继续”,“完成”上传方法提供一个示例。 – groveale

+0

嗨,所以我已经尝试了你建议的稍微修改过的版本。请参阅上面的更新。但是,我从SharePoint中看到以下错误:SharePoint错误:找不到文件'F:approot12-09-2017.zip'。我上传的文件是“12-09-2017.zip”。 “F:approot”从哪里来? –

相关问题