Rest 当我还有0个字节时,如何使用FinishUpload关闭分块文件上载?

Rest 当我还有0个字节时,如何使用FinishUpload关闭分块文件上载?,rest,file-upload,sharepoint-online,chunks,Rest,File Upload,Sharepoint Online,Chunks,我正在通过REST API将文件分块上传到SharePoint Online。 我通过StartUpload、ContinueUpload和FinishUpload方法执行此操作,并将一个块作为字节[]传递给它们 我以此为例,从以下方面开展工作: 文件如下: (我没有包括代码,因为我认为它不相关,如果我错了,请纠正我) 只要总文件大小大于块大小,此操作就有效。 例如,如果区块大小为1MB,但总文件大小为4MB,则该方法将起作用。 如果区块大小是4MB,但总文件大小是1MB,那么一旦上传,我就会得

我正在通过REST API将文件分块上传到SharePoint Online。
我通过
StartUpload
ContinueUpload
FinishUpload
方法执行此操作,并将一个块作为
字节[]
传递给它们

我以此为例,从以下方面开展工作:

文件如下:

(我没有包括代码,因为我认为它不相关,如果我错了,请纠正我)

只要总文件大小大于块大小,此操作就有效。
例如,如果区块大小为1MB,但总文件大小为4MB,则该方法将起作用。
如果区块大小是4MB,但总文件大小是1MB,那么一旦上传,我就会得到空的或损坏的文件

这是因为对
StartUpload
的初始调用将整个文件包含在一个块中,因此不会调用
FinishUpload
来关闭文件

如果我用一个空的
字节[0]
调用
FinishUpload
,那么我得到:

错误500-内部服务器错误:上载不完整。再次尝试保存

在正常情况下,我只需检查总文件大小是否小于块大小,而是直接使用
/Files/add(…)
添加文件

不幸的是,我被传递到一个流中的文件块,我事先不知道文件的总大小。我也不能在处理之前保存所有的块,我必须将每个块直接传递给SharePoint,因为我得到了它们


当我没有更多的字节要上传时,如何使用FixiHuuPuto关闭文件上传?< /强>

< p>对于这个问题,你可以考虑以下修改:

1) 如果总文件大小小于块大小,则文件 正在通过单个请求上载。例如:

var fi = new FileInfo(fileName);
if(fi.Length <= chunkSize)
{
   this.UploadFile(address, fileName);
   return;
}
var-fi=新文件信息(文件名);

如果(fi.Length虽然你在技术上没有错,但你也不对。我事先不知道文件大小,所以不知道是否可以在一个请求中上载。我没有使用SharePoint SDK库,我使用的是REST API,所以不能使用SharePoint客户端。@Equalsk,如果你看一下我提供的示例,你会注意到没有依赖关系SharePoint SDK库,仅REST(块上载)和RPC(单次上载)API是实用的Doh,我不好。我看到了类的名称并做出了错误的假设。我想这是我将得到的最接近的答案,但我会再等一段时间再接受。我实际上用另一种方式解决了这个问题,填充缓冲区直到它满了或者我没有剩余的字节来填充它。然后我就能够我将选择哪种上传方式。但是当然,您可以使用REST API来代替RPC。我正在使用
HttpClient
与REST API进行交互,目前它似乎运行良好。感谢您迄今为止的帮助。