如何通过 Autodesk Forge 上的数据管理 API 上传大于 100MB 的大文件?
How to upload a large file than 100MB via Data Management API on the Autodesk Forge?
最终结果:
我为这个错误道歉。
我在我的 http 请求中为 Content-Range
设置了错误的值。
示例在这里:
- 原始文件大小:5242880
- 块大小:2097152
- 所需的 HTTP 请求数:3
因此,正确的Content-Range
如下:
- 字节 0-2097151/5242880
- 字节 2097152-4194303/5242880
- 字节 4194304-5242879/5242880
感谢您的建议,我必须进行测试:
- cURL
- 邮递员
- 查尔斯
- Node.js
- C#
- Swift
第二次尝试 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-aa
和 data-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 的文件。
- PUT 桶/:bucketKey/objects/:objectName/resumable
https://forge.autodesk.com/en/docs/data/v2/reference/http/buckets-:bucketKey-objects-:objectName-resumable-PUT/
首先,我只是想知道 API 响应并验证。
因此,我使用 cURL 发送了 HTTP PUT 请求。
- 大文件为157286400字节(使用命令
dd if=/dev/random of=bigfile bs=1M count=150
)
- 数据块大小为 5242880 字节(使用命令
split -b 5242880 bigfile "temp/data-"
)
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 ...
如果你可以使用工具,并且不需要自己实现断点续传(你可以使用 VSCode),你应该看看 VS-Code Forge 工具。
https://github.com/petrbroz/vscode-forge-tools
https://forge.autodesk.com/blog/forge-visual-studio-code
我们的团队在测试期间使用它来上传 GB 大小的模型。
最终结果:
我为这个错误道歉。
我在我的 http 请求中为 Content-Range
设置了错误的值。
示例在这里:
- 原始文件大小:5242880
- 块大小:2097152
- 所需的 HTTP 请求数:3
因此,正确的Content-Range
如下:
- 字节 0-2097151/5242880
- 字节 2097152-4194303/5242880
- 字节 4194304-5242879/5242880
感谢您的建议,我必须进行测试:
- cURL
- 邮递员
- 查尔斯
- Node.js
- C#
- Swift
第二次尝试 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-aa
和 data-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 的文件。
- PUT 桶/:bucketKey/objects/:objectName/resumable https://forge.autodesk.com/en/docs/data/v2/reference/http/buckets-:bucketKey-objects-:objectName-resumable-PUT/
首先,我只是想知道 API 响应并验证。 因此,我使用 cURL 发送了 HTTP PUT 请求。
- 大文件为157286400字节(使用命令
dd if=/dev/random of=bigfile bs=1M count=150
) - 数据块大小为 5242880 字节(使用命令
split -b 5242880 bigfile "temp/data-"
)
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 ...
如果你可以使用工具,并且不需要自己实现断点续传(你可以使用 VSCode),你应该看看 VS-Code Forge 工具。
https://github.com/petrbroz/vscode-forge-tools
https://forge.autodesk.com/blog/forge-visual-studio-code
我们的团队在测试期间使用它来上传 GB 大小的模型。