如何获得github LFS(大文件存储)中文件的直接链接?

I.U*_*.U. 11 git github git-lfs

我使用 Git LFS(大文件存储)将一个大文件上传到 gitub。

起初我可以从直接链接下载文件。

raw.githubusercontent.com/userName/reposiotry/master/file.mp4
Run Code Online (Sandbox Code Playgroud)

但是第二天文件开始包含一个文本值

oid sha256:59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1
尺寸 123882252

我如何下载这个文件?如何获得它的直接链接?

Nev*_*Ton 5

假设 ServerAddress 例如https://api.github.com

  1. 如果您知道您的 RepoName('UserName/RepositoryName' 对)和 FileHash,那么您将获取:ServerAddress + '/repos/RepoName/git/blobs/FileHash'
    如果响应中您有:
version https://git-lfs.github.com/spec/v1  
oid sha256:59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1  
size 123882252
Run Code Online (Sandbox Code Playgroud)
  1. 那么您必须在存储库的内容中搜索匹配的 FileHash,
    获取:ServerAddress + '/repos/RepoName/contents'
    并作为响应您有:
{
  "name": "filename.ext",
  "path": "path/filename.ext",
  "sha": "FileHash",
  "size": 42,
  "url": "https://api.github.com/repos/RepoName/contents/path/filename.ext?ref=master",
  "html_url": "...",
  "git_url": "...",
  "download_url": "...",
  "type": "file",
  "_links": { ... }
}
Run Code Online (Sandbox Code Playgroud)
  1. 现在你获取url值并获取它,
    作为响应你有:
{
  "name": "filename.ext",
  "path": "path/filename.ext",
  "sha": "FileHash",
  "size": 720896,
  "url": "...",
  "html_url": "...",
  "git_url": "...",
  "download_url": "https://media.githubusercontent.com/media/RepoName/RepoHash/path/filename.ext?token=...",
  "type": "file",
  "content": "...", // same as response from pt. 1
  "encoding": "base64",
  "_links": { ... }
}
Run Code Online (Sandbox Code Playgroud)
  1. 现在您获取download_url值并获取它,
    作为响应,您应该拥有BINARY文件内容。


bk2*_*204 1

您需要进入网络界面并找到文件的原始链接并使用它。

当您使用 Git LFS 时,实际存储在存储库中的文件是一个指针文件,就像您在上面看到的那样。GitHub 有不同的 URL 来提供存储库内容和 Git LFS 文件的原始内容,因此如果您想获取 Git LFS 内容,则需要使用适当的链接。如果您之前将该文件作为非 LFS 文件,那么当您再次将其作为 LFS 文件上传时,URL 将发生更改。

请注意,不鼓励在网页中使用这些 URL 或以其他方式使用这些直接链接作为 CDN 形式。