我有一个上传大文件的方法,叫做uploadLargeAttachment,由于某些原因,它总是失败,错误代码为503
下面是我的方法
public static maxAttachmentBytes = Math.pow(1024, 2) * 3;
private async getAuthHeaders() {
const token = await this.getAccessToken();
return {
authorization: `Bearer ${token}`,
};
}
public async uploadLargeAttachment(
inbox: string,
messageId: string,
attachment: MSGraph.UploadAttachmentData
) {
let content = Buffer.from(attachment.contentBytes, "base64");
const session = await this.axios.post(
`users/${inbox}/messages/${messageId}/attachments/createUploadSession`,
{
AttachmentItem: {
attachmentType: "file",
name: attachment.name,
size: attachment.size,
},
},
{
headers: await this.getAuthHeaders(),
}
);
let start = 0;
try {
while (content.byteLength > 0) {
const bytes = Math.min(
EmailRepository.maxAttachmentBytes,
content.byteLength
);
const result = await this.axios.put(
session.data.uploadUrl,
content.slice(0, bytes),
{
// maxContentLength: Infinity,
headers: {
"Content-Range": `bytes ${start}-${start + bytes - 1}/${
attachment.size
}`,
"Content-Type": "application/octet-stream",
"Content-Length": bytes,
"Retry-After": 5, --> this second try
},
}
);
if (result.data.NextExpectedRanges) {
start = parseInt(result.data.NextExpectedRanges[0]);
}
content = content.slice(bytes);
}
} catch (error) {
await this.axios.delete(session.data.uploadUrl);
throw error;
}
}我尝试解决问题1-减少maxAttachmentBytes 2-我添加了"Retry-After": 5,,但仍未解决我缺少的问题
错误日志
Error: Request failed with status code 503
at createError (/Users/minafawzy/Documents/TechModgroup/BDS-API/node_modules/axios/lib/core/createError.js:16:15)
at settle (/Users/minafawzy/Documents/TechModgroup/BDS-API/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/Users/minafawzy/Documents/TechModgroup/BDS-API/node_modules/axios/lib/adapters/http.js:236:11)
at IncomingMessage.emit (events.js:327:22)
at IncomingMessage.EventEmitter.emit (domain.js:483:12)
at endReadableNT (_stream_readable.js:1220:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)发布于 2020-10-11 04:51:35
我错过拼写NextExpectedRanges了,我把它修好了
if (result.data.nextExpectedRanges) {
start = parseInt(result.data.nextExpectedRanges[0]);
}https://stackoverflow.com/questions/64264477
复制相似问题