413错误:正在使用会话上载到OneDrive API



我有一个React.js应用程序,该应用程序将通过其API将大文件上传到Microsoft OneDrive。我有一个大约3GB(2975226488字节(的测试文件,我一次将文件划分为327680字节。但在第一个范围[0-327680]字节时,API会返回413个错误。

在这里,我正在创建一个会话并获取一个会话url。

const sessResp = await fetch(`https://graph.microsoft.com/v1.0/me/drive/root:/Dropzone/${filename}:/createUploadSession`, {
method: "POST",
headers: headers
});
const sessParsed = await sessResp.json();

然后我一次上传文件的范围,因为根据文档,它被假设为320Kib(327680字节(的倍数。此处

let ranges = []; 
for (let a = 0; a < filesize; a+=327680) { //320 KiB (327,680 bytes)
ranges.push(a); 
}
ranges.push(filesize);

然后,我循环浏览我的范围数组,并一次请求每个范围将我的文件上传到OneDrive。

for (let i = 0; i <= ranges.length; i++) { 
let uploadSize = filesize > 327680 ? 327680 : ranges[1]; // if filesize is smaller than 327680 then only 2 elements in ranges

let fileheaders = new Headers();
fileheaders.append("Authorization", bearer);
fileheaders.append("Content-Type", "application/json");

fileheaders.append("Content-Length", uploadSize);
fileheaders.append("Content-Range", `bytes ${ranges[i]}-${ranges[i+1]-1}/${filesize}`);
const resp = await fetch(sessParsed.uploadUrl, {
method: "PUT",
headers: fileheaders, 
body: binaryStr
});

}

使用Streams上传文档

随着时间的推移,这种上传功能在性能方面可能无法很好地扩展

查看这篇文章:https://medium.com/@vecera.petr/how-handle-large-file-upload-with-nodejs-express-server-7de9ab3f7af1

最新更新