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

Posted

技术标签:

【中文标题】如何通过 Autodesk Forge 上的数据管理 API 上传超过 100MB 的大文件?【英文标题】:How to upload a large file than 100MB via Data Management API on the Autodesk Forge? 【发布时间】:2020-07-20 16:47:17 【问题描述】:

最终结果:

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

例子在这里:

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

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

    字节 0-2097151/5242880 字节 2097152-4194303/5242880 字节 4194304-5242879/5242880

感谢您的建议,我得到了测试:

卷曲 邮递员 查尔斯 Node.js C# 斯威夫特

Postman 的第二次尝试:

我再次使用Postman 尝试了以下 API。

PUT buckets/:bucketKey/objects/:objectName/resumable

我使用的是 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 的文件。

PUT buckets/: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 响应返回 HTTP/1.1 504 GATEWAY_TIMEOUT. 如何通过 Autodesk Forge 上的 Data Management API 上传超过 100MB 的大文件?

【问题讨论】:

【参考方案1】:

如果您可以使用工具,并且不需要自己实现可恢复上传(并且可以使用 VSCode),则应该查看 VS-Code Forge Tools。

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

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

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

【讨论】:

谢谢。我不知道vscode-forge-tools。太酷了!【参考方案2】:

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

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

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(指南here)。

【讨论】:

我尝试在forge-tools-hub.now.sh/uploader 上上传。我将块大小设置为 2 MB。上传失败,出现以下模式:- 测试数据 1:dd if=/dev/random of=bigfile bs=1M count=150 - 测试数据 2:rst_basic_sample_project.rvt 您可以在您的环境中上传吗? The uploader 显然无法正常工作。谈GitHub - Failed to upload file 更新我的question。

以上是关于如何通过 Autodesk Forge 上的数据管理 API 上传超过 100MB 的大文件?的主要内容,如果未能解决你的问题,请参考以下文章

Forge Autodesk 上的存储桶是如何隔离的?

如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单

Autodesk Forge Viewer - 触控设备上的多选

通过 Heroku 运行的 Autodesk Forge 不会显示仪表板扩展

通过 Autodesk Forge 将数据推送到云端

本地服务器上的 Autodesk Forge 主机依赖项