我正在尝试使用 StartUpload、ContinueUpload 和 FinishUpload 函数将大文件在线上传到 SharePoint。当我使用以下代码添加文件时,这对我来说很好用:
using (MemoryStream contentStream = new MemoryStream()) { FileCreationInformation fileInfo = new FileCreationInformation(); fileInfo.ContentStream = 内容流; fileInfo.Url = uniqueFileName; fileInfo.Overwrite = true; uploadFile = parentFolder.Files.Add(文件信息); using (MemoryStream s = new MemoryStream(buffer10MB)) { // 调用第一个切片的开始上传方法。 bytesUploaded = uploadFile.StartUpload(uploadId, s); CTX的。执行查询(); // fileoffset 是将添加下一个切片的指针。 文件偏移量 = bytesUploaded.Value; } }
但是我正在尝试使用Files.AddUsingPath函数而不是Files.Add来允许文件名中的特殊字符。具体来说,我看到如果文件名具有 % 字符,那么上面的代码会将文件重命名为 %25 。但是在使用 AddUsingPath 时,我收到错误:
无法访问已关闭的流。在 System.IO.__Error.StreamIsClosed() 在 System.IO.MemoryStream.get_Length() 在 Microsoft.SharePoint.Client.ClientRequest.WriteMimeStream(ExecuteQueryMimeInfo mimeInfo, ChunkStringBuilder sb, Stream requestStream) 在 Microsoft.SharePoint.Client.ClientRequest.SetupServerQuery(ChunkStringBuilder sb) 在 Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) 在 Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
AddUsingPath 的代码如下所示:
if(first) using (MemoryStream contentStream = new MemoryStream()) { FileCollectionAddParameters fileAddParameters = new FileCollectionAddParameters(); fileAddParameters.Overwrite = true; uploadFile = parentFolder.Files.AddUsingPath(resourcePath, fileAddParameters, contentStream); using (MemoryStream s = new MemoryStream(buffer10MB)) { // 调用第一个切片的开始上传方法。 bytesUploaded = uploadFile.StartUpload(uploadId, s); CTX的。执行查询(); // fileoffset 是将添加下一个切片的指针。 文件偏移量 = bytesUploaded.Value; } } else if(continue) { using (MemoryStream s = new MemoryStream(buffer10MB)) { // 继续切片上传。 bytesUploaded = uploadFile.ContinueUpload(uploadId, fileoffset, s); CTX的。执行查询();在此处出现错误:无法访问已关闭的流。when continue // 更新下一个切片的 fileoffset。 文件偏移量 = bytesUploaded.Value; } }
我在这里所做的区别是,如果文件的第一次上传,但继续上传和完成上传功能保持不变,则使用 AddUsingPath 添加文件。
如果我遗漏了什么,请告诉我。
Note:此问题总结整理于: Upload large files to SharePoint Online using AddUsingPath