如何使用OneDrive REST API 上传文件到OneDrive?

9 投票
2 回答
5105 浏览
提问于 2025-05-10 15:20

让我来解释一下我在做什么以及我是怎么做的.

我在做什么?

我正在尝试通过OneDrive的REST API上传一个文件。
来源:OneDrive API文档

我使用的是OneDrive的分片上传方法,因为文件可以大到5GB,也可以小到1KB(这取决于用户)。

目前,我是通过POST-MAN这个Chrome扩展来调用API的。

我是怎么做的?

  1. 生成了访问令牌
  2. 创建了会话并获得了上传的URL
  3. 使用PUT请求上传文件,如下所示

选择了我想上传的文件(文件大小:729676295字节)
在这里输入图片描述

添加了请求头并发送了请求。
在这里输入图片描述这是结果
在这里输入图片描述

系统提示最大分片大小为67108864字节,所以我把以下值改了:

content-length : 67108864content-range : bytes 0-67108863/729676295

但随后我收到了这个错误信息:声明的分片长度与提供的字节数不匹配
在这里输入图片描述

请帮我弄清楚我应该在content-length和content-range中传递什么。

非常感谢你的关注。

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

2

这里是图片描述

{totalNumberOfBytesOfFile}content-length 不是一个意思;

Content-Length 是当前这部分数据的字节数。

这张图片是一个上传4917字节文件的例子。

6

最后,感谢上天,经过两天的挣扎,我终于找到了问题所在。

这里有几个要点需要记住:

  1. 你需要把一个文件分成若干个相等的部分,然后把它们保存到某个地方,并在创建会话后,分别上传这些部分到同一个网址。
  2. Content-Length 必须是你在所有上传请求中,上传的文件总字节数。
  3. Content-Range 的格式是:0-{fragmentLength-1}/{totalNumberOfBytesOfFile}(和 content-length 一样),接下来的部分的 Content-Range 则是 {uploadedBytes}-{uploadedBytes+nextSetOfBytes-1}/{totalNumberOfBytesOfFile}

注意:下一组字节的长度应该和前一组一样。别担心,因为最后一部分可以不同。

附注:不要使用在成功上传某个部分后收到的 content-range。

撰写回答