首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Msgraph -使用typeScript上传大文件

Msgraph -使用typeScript上传大文件
EN

Stack Overflow用户
提问于 2020-10-08 22:17:33
回答 1查看 149关注 0票数 0

我有一个上传大文件的方法,叫做uploadLargeAttachment,由于某些原因,它总是失败,错误代码为503

下面是我的方法

代码语言:javascript
复制
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,,但仍未解决我缺少的问题

错误日志

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-11 04:51:35

我错过拼写NextExpectedRanges了,我把它修好了

代码语言:javascript
复制
 if (result.data.nextExpectedRanges) {
              start = parseInt(result.data.nextExpectedRanges[0]);
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64264477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档