如何通过 Autodesk Forge 上的数据管理 API 上传大于 100MB 的大文件?

How to upload a large file than 100MB via Data Management API on the Autodesk Forge?

最终结果:

我为这个错误道歉。
我在我的 http 请求中为 Content-Range 设置了错误的值。

示例在这里:

  1. 原始文件大小:5242880
  2. 块大小:2097152
  3. 所需的 HTTP 请求数:3

因此,正确的Content-Range如下:

  1. 字节 0-2097151/5242880
  2. 字节 2097152-4194303/5242880
  3. 字节 4194304-5242879/5242880

感谢您的建议,我必须进行测试:


第二次尝试 Postman:

我再次尝试 API 和 Postman

我用的是Autdesk提供的rst_basic_sample_project.rvt
该文件为 5693440 字节。

$ du -b rst_basic_sample_project.rvt
5693440 rst_basic_sample_project.rvt

我用下面的命令划分。

# Chunk size is 5 MB.
split -b 5242880 rst_basic_sample_project.rvt "temp/data-"

所以,我得到了 data-aadata-ab
接下来,尝试使用 PUT buckets/:bucketKey/objects/:objectName/resumable.

发送data-aa到API。 HTTP 请求在这里:

PUT /oss/v2/buckets/${MY-BUCKET-KEY}/objects/${MY-OBJECT-NAME}/resumable HTTP/1.1
Host: developer.api.autodesk.com
Authorization: Bearer ${MY-TOKEN}
Content-Range: bytes 1-5242880/5693440
session-id: j45e05
Content-Type: application/octet-stream

"<data-aa binary>"

我收到 HTTP 202。这是预期的结果。
然后,将 data-ab 发送到 API。 HTTP 请求在这里:

PUT /oss/v2/buckets/${MY-BUCKET-KEY}/objects/${MY-OBJECT-NAME}/resumable HTTP/1.1
Host: developer.api.autodesk.com
Authorization: Bearer ${MY-TOKEN}
Content-Range: bytes 5242880-5693440/5693440
Content-Type: application/stream
session-id: j45e05
Content-Type: application/octet-stream

"<data-ab binary>"

我得到了HTTP 416 Requested Range Not Satisfiable
出乎意料的结果。


首先尝试使用 cURL:

请教我如何上传大文件。
我正在尝试使用下面的 API 上传大于 100MB 的文件。

首先,我只是想知道 API 响应并验证。 因此,我使用 cURL 发送了 HTTP PUT 请求。

cURL 命令在这里:

curl \
    -v \
    -X PUT "https://developer.api.autodesk.com/oss/v2/buckets/${MY-BUCKET-KEY}/objects/${MY-OBJECT-NAME}/resumable" \
    -H "Authorization:Bearer ${MY-TOKEN}" \
    -H "Content-Length: 5242880" \
    -H "Content-Type:text/plain; charset=UTF-8" \
    -H "Content-Range:bytes 1-5242880‬/157286400 " \
    -H "Session-Id:111111111" \
    --data @temp/data-aa # One of the files created by splitting a large file with the split command.

# PUT /oss/v2/buckets/${MY-BUCKET-KEY}/objects/${MY-OBJECT-NAME}/resumable HTTP/1.1
# Host: developer.api.autodesk.com
# User-Agent: curl/7.69.0
# Accept: */*
# Authorization:Bearer ${MY-TOKEN}
# Content-Length: 5242880
# Content-Type:text/plain; charset=UTF-8
# Content-Range:bytes 1-5242880‬/157286400 
# Session-Id:111111111

API 响应 return HTTP/1.1 504 GATEWAY_TIMEOUT.
如何通过 Autodesk Forge 上的数据管理 API 上传大于 100MB 的大文件?

尝试buckets/:bucketKey/objects/:objectName/resumable

然后您可以将较大的文件拆分成块,并在 header 中为每个上传块的请求指定一个范围,以避免超时和其他网络问题,例如:

curl -v "https://developer.api.autodesk.com/oss/v2/buckets/bucketexamplekey/objects/objectKeyFoo/resumable"
  -X PUT
  -H "Authorization:Bearer p0vNqwggSc4EOJdhR4KkTVyJFIzQ"
  -H "Content-Type:text/plain; charset=UTF-8"
  -H "Content-Range:bytes 1-15/100"
  -H "Session-Id:-811577637"
  --data ...

为此,您可能还想使用此工具 here (guide here)。

如果你可以使用工具,并且不需要自己实现断点续传(你可以使用 VSCode),你应该看看 VS-Code Forge 工具。

https://github.com/petrbroz/vscode-forge-tools

https://forge.autodesk.com/blog/forge-visual-studio-code

我们的团队在测试期间使用它来上传 GB 大小的模型。