如何在剩余0字节时用FinishUpload结束SharePoint分片文件上传?
嘿,我对这个分片上传流程门儿清,来给你唠唠剩余0字节时怎么用FinishUpload搞定收尾~
首先得明确:哪怕最后剩余0字节,你也必须调用FinishUpload来完成整个上传流程,不然文件会卡在未完成状态,根本没法正常用。下面是具体的操作步骤和注意点:
核心逻辑
FinishUpload需要两个关键参数,再配合一个特殊的请求体:
uploadId:就是你第一次调用StartUpload时拿到的那个GUID,全程必须用同一个,不能换fileOffset:这个是你已经上传的总字节数,也就是文件的总大小(因为剩余0字节,说明已上传=总大小)- 请求体:传一个空的byte[](也就是0字节的数组),不能省略
具体操作步骤
确认已上传总字节数
把之前StartUpload和所有ContinueUpload上传的字节数加起来,这个数值要和文件的总大小完全一致(毕竟剩余0字节)。比如你分两次传了5MB+5MB,总大小10MB,那fileOffset就是10*1024*1024=10485760。构造FinishUpload请求
- 请求方法:POST
- 请求URL格式:
/_api/web/getfolderbyserverrelativeurl('{你的文件夹路径}')/files/add(overwrite=true,url='{文件名}')/FinishUpload(uploadId='{你的uploadId}',fileOffset={已上传总字节数}) - 请求头:要带上正确的授权信息(比如Bearer Token),还有
Content-Type: application/octet-stream - 请求体:直接传空的byte数组就行,比如
new byte[0](不同语言写法不一样,但本质是0字节的二进制数据)
处理响应
成功调用后,会返回文件的元数据(比如文件ID、URL、大小这些),这就说明上传完全搞定了。
避坑提醒
- 别偷懒跳过FinishUpload:哪怕剩余0字节,不调用这个方法,SharePoint会认为上传没完成,文件会变成“损坏”或者不可访问的状态
- 偏移量一定要准确:
fileOffset必须严格等于已上传的总字节数,差一个字节都会返回400错误 - 全程用同一个uploadId:从Start到Finish,这个GUID必须一致,不然会直接报错
举个实际的请求例子(伪代码风格):
假设已上传总字节数是10485760(10MB),uploadId是
123e4567-e89b-12d3-a456-426614174000,文件夹是/Shared Documents,文件名是report.pdf
请求URL:/_api/web/getfolderbyserverrelativeurl('/Shared Documents')/files/add(overwrite=true,url='report.pdf')/FinishUpload(uploadId='123e4567-e89b-12d3-a456-426614174000',fileOffset=10485760)
请求体:空byte数组
请求头:Authorization: Bearer {你的token},Content-Type: application/octet-stream
内容的提问来源于stack exchange,提问作者Equalsk

