微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用MS Graph API上传大型附件

如何解决无法使用MS Graph API上传大型附件

我正在尝试使用Microsoft Graph API将大型附件添加到电子邮件中。该文档尚不清楚图api的非beta版的实际功能是什么,但这是我到目前为止已经尝试过的功能。 (在所有这些示例中,“ this.client”都是Microsoft Auth Provider的实例,并已根据MS图形api进行了验证)

  1. 使用LargeFileUploadTask创建一个上传会话。
    const uploadSession = await LargeFileUploadTask.createUploadSession(
        this.client,`/me/messages/${draftId}/attachments/createUploadSession`,{
          AttachmentItem: {
            '@microsoft.graph.conflictBehavior': 'fail',name: file.name,attachmentType: 'file',size: file.size,},}
      );

    const uploadTask = await new LargeFileUploadTask(this.client,fileObject,uploadSession);

    await uploadTask.upload();

方法的问题在于,即使LargeFileUploadTask类直接来自@microsoft/microsoft-graph-client包,响应URL还是用于旧的Outlook REST api,而不是图api。由于我没有REST api的令牌,因此请求失败,并显示消息“受众声明值无效'aud'”。

1a。我也尝试过手动滚动,而没有使用LargeFileUploadTask类,并且遇到了同样的问题。后续PUT请求返回的URL用于旧的Outlook REST API。

      const payload = {
        AttachmentItem: {
          attachmentType: 'file',};

      const uploadSession = await this.client
        .api(`/me/messages/${draftId}/attachments/createUploadSession`)
        .post(payload);

    // uploadSession.url is still outlook.com,not graph.microsoft.com

  1. 使用oneDriveLargeFileUploadTask将文件上传到OneDrive,然后在草稿上创建referenceAttachment。
    const options = {
      fileName: file.name,rangeSize: 1024 * 1024,};

    const uploadTask = await OneDriveLargeFileUploadTask.create(client,file,options);
    const attachment = await uploadTask.upload();

    await this.client.api(`/me/messages/${draftId}/attachments`).post(attachment);

文件已成功上传到OneDrive,但是在/ attachments端点(代码段的最后一行)中,POST请求出现以下错误

"The property 'SourceUrl' is required when creating the entity."

据我所知,仅beta图形api支持sourceUrl,而我并未使用它。

是否可以通过Microsoft Graph API来实现此功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。