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

最终结果:

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

例子在这里:

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

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

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

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

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

Postman 的第二次尝试:

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

我使用的是 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 请求。

  • 大文件为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 的大文件?

【问题讨论】:

    标签: curl postman autodesk-forge autodesk-data-management


    【解决方案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)。

    【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2017-01-12
    • 2019-11-16
    • 2018-10-11
    • 2019-03-24
    • 2021-12-17
    • 2012-05-16
    • 2020-06-05
    • 2019-01-03
    相关资源
    最近更新 更多