Github如何上传超过100M的大文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Github如何上传超过100M的大文件相关的知识,希望对你有一定的参考价值。

参考技术A 笔者我是在github上做了一个开源库( 一个灵活配置的自定义相机库(拍照+录制视频) )从而录制了一个大概200M+的gif文件,在commit完成了,push的时候 总是报错,大致信息如下:



上面错误的原因很好理解就是GitHub不允许直接上传大文件(超过100M)的文件到远程仓库,若要想继续提交可以尝试使用大文件支持库: https://git-lfs.github.com
LFS使用的简单步骤:

1-2步没变,第3步我是生成.gitattributes后 add并且commit并且把.gitattributes文件push到远程分支,合并完成后,然后再add并且commit然后再push这个大文件.

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

【中文标题】如何通过 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。

以上是关于Github如何上传超过100M的大文件的主要内容,如果未能解决你的问题,请参考以下文章

Git上传大文件

GitHub上传文件不能超过100M的解决办法

如何使用Git LFS上传超过100M的二进制文件到GitHub,及GitHub加速解决方案

git添加文件个数超限制

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

使用 PHP 的大文件上传错误