【问题标题】:Microsoft Graph (OneDrive) API - Resumable Upload Content-TypeMicrosoft Graph (OneDrive) API - 可恢复上传内容类型
【发布时间】:2021-01-24 08:24:02
【问题描述】:

我正在尝试为 OneDrive API 创建上传 PUT 请求。大文件“可续传”版本需要createUploadSession。

我在这里阅读了 Microsoft 文档:As a warning the docs are VERY inaccurate and full of factual errors...

文档只是说:

https://sn3302.up.1drv.com/up/fe6987415ace7X4e1eF866337
内容长度: 26
Content-Range:字节 0-25/128

我已通过身份验证并创建了上传会话,但是当我传递包含我的二进制文件的 JSON 正文时,我收到此错误:

{ “错误”:{ "code": "BadRequest", "message": "payload 中的属性文件的值与架构不匹配。", .....

谁能指出我的架构定义?或者解释一下 JSON 应该如何构造?

作为一个附带问题,我完全正确地使用“application/json”吗?请求应该使用什么格式?

确认一下,我可以看到创建的临时文件已准备好并在 OneDrive 上等待上传,所以我知道我已经接近了。

感谢您的帮助!

【问题讨论】:

  • 您需要记住,您的应用必须确保 Content-Range 标头中指定的总文件大小对于所有请求都相同。如果字节范围声明了不同的文件大小,则请求将失败。所以,我会尝试这样的事情: PUT sn3302.up.1drv.com/up/fe6987415ace7X4e1eF866337 Content-Length: 26 Content-Range: bytes 0-25/128
  • 谢谢你,但我不想分块上传。我将整个文件放在一个请求中。真正的问题是什么是正确的 JSON 模式。另外,application/json 是正确的 Content-Type 吗?

标签: microsoft-graph-api onedrive


【解决方案1】:

如果您在单个请求中上传整个文件,那么当您可以使用简单的 PUT 请求时,为什么还要使用上传会话?

url = https://graph.microsoft.com/v1.0/{user_id}/items/{parent_folder_ref_id}:/{filename}:/content"Content-Type": "text/plain" 标题和正文中只需放入文件bytes

如果由于某种原因我不明白您必须使用单块上传会话,那么:

  1. 创建上传会话(你没有在这里指定任何问题,所以我不详细说明)

  2. createUploadSession 响应中获取uploadUrl 并发送带有以下标头的PUT 请求:

    2.1"Content-Length": str(file_size_in_bytes)

    2.2"Content-Range": "bytes 0-{file_size_in_bytes - 1}/{file_size_in_bytes}"

    2.3"Content-Type": "text/plain"

  3. 在正文中传递文件字节。

请注意,在PUT 请求中,正文不是json,而只是bytes(由content-type 标头指定。

另请注意,最大卡盘大小为 4MB,因此如果您的文件大于该大小,则必须拆分为多个块。

好人

【讨论】:

  • 嗨诺姆,感谢您的回复。据我了解,文件上传的简单 PUT 版本限制为 4MB docs.microsoft.com/en-us/graph/api/… 但是,“使用上传会话上传大文件”docs.microsoft.com/en-us/graph/api/… 的最大文件大小为 60MB,这足以让我上传单块。我的文件 >4MB &
  • 我似乎也不知道如何格式化 cmets .. 抱歉:-(
  • 好的,所以我尝试将内容类型设为“text/plain”,返回的 API 错误为:“{“error”:{“code”:“BadRequest”,“message”:“实体仅允许使用 JSON Content-Type 标头进行写入。"," ... @Noam 您确定此内容类型对于可恢复上传正确吗?
  • 我应该提到我正在尝试上传到 OneDrive for Business 帐户而不是个人帐户...
  • 嗨,抱歉耽搁了,这真的很奇怪。我在我的代码中做同样的事情并且它正在工作,不知道该说什么。如果你确实解决了它,请在这里分享你是如何做到的......祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多