【问题标题】:How do I format Content-Range header for Upload Session Microsoft Graph API如何格式化上传会话 Microsoft Graph API 的 Content-Range 标头
【发布时间】:2017-10-10 15:08:27
【问题描述】:

我在使用 v1.0 Microsoft Graph API 将文件上传到上传会话时遇到问题。 我的步骤:

  1. 获取访问令牌:成功
  2. 选择文件/创建上传会话:成功(我返回一个 uploadUrl 来上传字节)
  3. 上传字节到 uploadUrl:失败并出现以下错误。

这是我收到的错误:

{
   "error": 
   {
      "code":"invalidRequest",
      "message":"The Content-Range header is missing or malformed."
   }
}

我已尝试使用以下格式,但仍然收到相同的错误。

"bytes 0-100/100"
"0-100/100"
"0-100"

我正在关注这篇来自 Mircosoft https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/item_createuploadsession的文章

这是我上传到从创建上传会话中检索到的 uploadUrl 的函数

public uploadToSession(file: HTMLInputElement, session: any, fileData: any) {
    var headers = new Headers();
    headers.append('Content-Length', fileData.length); //(ie: "100")
    headers.append('Content-Range', fileData.range); //(ie: "bytes 0-100/100")
    this.http.put(session.uploadUrl, { headers })
        .subscribe(
            (res: Response) => console.log(res),
            error => console.log(error)
        );
}

非常感谢任何帮助!提前致谢。

【问题讨论】:

  • 这个 API 背后的想法是你正在发送块,对吗?所以它的工作原理是总文件大小大于一个块,即bytes 0-50/100,然后是bytes 50-100/100
  • API 旨在允许发送卡盘是正确的,但是,据我了解,只要大小小于 60 MiB,您也可以发送整个文件。您是否看过说明您不能一次发送整个文件的文档?我试图避免根据大小使用两种不同的上传方法,但如果这是唯一的方法,那就这样吧。
  • 不 - 我找不到任何东西,但你的代码看起来不错,所以我正在创新可能发生的潜在问题

标签: typescript sharepoint microsoft-graph-api


【解决方案1】:

Content-Range 标头具有以下格式:

Content-Range: bytes <startindex>-<endindex>/<totallength>

您的问题似乎是索引(基于 0)和长度(基于 1)的混合。对于 100 字节的文件,您的标头需要如下所示:

Content-Range: bytes 0-99/100

【讨论】:

  • 谢谢你,布拉德。该值应该是字符串吗?
  • content.Headers.ContentRange = new ContentRangeHeaderValue( 0, source.Length-1, source.Length);
  • 内容范围标头上的 MDN 文档暗示您可以使用 */* 但这对我不起作用。如上所述完全指定它可以正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2022-01-15
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多