【问题标题】:How do I download a file from a GitHub draft如何从 GitHub 草稿中下载文件
【发布时间】:2020-03-21 19:54:24
【问题描述】:

我正在使用 AppVeyor 为 GitHub 存储库设置 CI,并将构建工件上传到名为 CI builds 的草稿。该文件是例如位于

https://github.com/an_organisation/a_project/releases/tag/untagged-1111aaaacccc0000dddd/filename.tar.gz

并且可以从浏览器访问和下载。

现在我想从另一个 AppVeyor 项目(即 appveyor.yml 脚本)访问那些上传的工件。我尝试使用以下命令使用 AppVeyor DownloadFile 命令、curlwget 下载,但没有成功

  set DOWNLOAD_FILENAME=filename.tar.gz
  set DOWNLOAD_ADDRESS=https://github.com/an_organisation/a_project/releases/download/untagged-1111aaaacccc0000dddd/$DOWNLOAD_FILENAME

  wget --header "Authorization: token $GH_AUTH_TOKEN" --output-document=$DOWNLOAD_FILENAME $DOWNLOAD_ADDRESS

  wget --auth-no-challenge --header "Accept:application/octet-stream" --output-document=$DOWNLOAD_FILENAME "$DOWNLOAD_ADDRESS?access_token:$GH_AUTH_TOKEN"

  curl -fsSL -G --user "$APPVEYOR_ACCOUNT_NAME:$GH_AUTH_TOKEN" -o $DOWNLOAD_FILENAME $DOWNLOAD_ADDRESS

  curl -fsSL -G -H "Authorization: token $GH_AUTH_TOKEN" -H "Accept: application/octet-stream" -o $DOWNLOAD_FILENAME $DOWNLOAD_ADDRESS

  curl -fsSL -G -H "Authorization: token $GH_AUTH_TOKEN" -H "Accept: application/octet-stream" -o $DOWNLOAD_FILENAME https://api.github.com/repos/an_organisation/a_project/releases/download/untagged-1111aaaacccc0000dddd/

慢慢地,我感觉无法通过 GitHub API 或下载链接从草稿中下载文件。

下载此类文件的正确命令是什么?

【问题讨论】:

    标签: github github-api appveyor


    【解决方案1】:

    TLDR 使用带有标题Accept: application/octet-streamGet Release asset API

    curl -OJ -L -H "Accept: application/octet-stream" \
        -H "Authorization: Token $YOUR_TOKEN" \
        "https://api.github.com/repos/$REPO/releases/assets/$ASSET_ID"
    

    您需要拥有assetID。为了拥有它,如果您还没有此信息,则需要 releaseID 使用GET /repos/:user/:repo/releases

    curl -s -H "Authorization: Token $YOUR_TOKEN" \
       "https://api.github.com/repos/$REPO/releases" | jq '.[] | {(.name): .id}'
    

    然后获取资产ID使用GET /repos/:user/:repo/releases/:release_id

    curl -s -H "Authorization: Token $YOUR_TOKEN" \
        "https://api.github.com/repos/$REPO/releases/$RELEASE_ID" | \
        jq -r '.assets[] | {(.id |tostring): .name}'
    

    一旦你有了assetID(也许你已经有了它btw)你终于可以使用GET /repos/:user/:repo/releases/assets/:asset_id和标题Accept: application/octet-stream。来自the documentation

    要下载资产的二进制内容,请设置 对应用程序/八位字节流的请求。 API 将重定向 客户端到该位置,或者如果可能的话直接流式传输。 API 客户端 应该同时处理 200 或 302 响应。

    以下下载文件到本地:

    curl -OJ -L -H "Accept: application/octet-stream" \
        -H "Authorization: Token $YOUR_TOKEN" \
        "https://api.github.com/repos/$REPO/releases/assets/$ASSET_ID"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-09
      • 2013-04-16
      • 2020-09-30
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      相关资源
      最近更新 更多