【问题标题】:Cannot upload github release asset through API无法通过 API 上传 github 发布资产
【发布时间】:2015-05-06 02:04:52
【问题描述】:

我有一个没有资产的 github 版本:

$ curl https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets
[

]

但我不能upload an asset 到这个版本:

$ curl -X POST --header "Content-Type:application/edn" --data-binary @cljsdocs-full.edn "https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets?name=full.edn&access_token=$(cat my-token)"
{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3"
}

我的 api 访问令牌具有 public_repo 访问权限。感谢您在上传此资产方面提供的任何帮助。

【问题讨论】:

  • 如果您将$(cat my-token) 替换为实际令牌会起作用吗(如果 cat 返回的换行符是问题)?

标签: github-api


【解决方案1】:
【解决方案2】:

资产上传 URL 的格式为 https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip。您可能会收到非常无用的“未找到”错误,有几个可能的原因:

  1. 版本 ID 错误。上面 URL 中的 :id 字段不是您为发布提供的名称,而是 GitHub 生成的数字 ID(可能是数据库 ID)。要获取版本 ID,您必须调用 releases API 并在 JSON 响应中搜索 tag_name 等于您使用的名称的版本。例如,如果您将发布命名为 v0.0.3,请在 JSON 中搜索带有 "tag_name": "v0.0.3" 的发布并使用该发布的 id 字段。
  2. 上传网址错误。您用于上传资产的 URL 与用于所有其他 API 调用的 URL 不同。要获得正确的上传 URL,请使用相同的 releases API,使用上述 tag_name 查找您的版本,然后从 JSON 响应中提取 upload_url 字段。这是伊万(已接受)的答案。
  3. 缺少 GitHub 访问令牌权限。这是最让我失望的一个,因为我使用的令牌 能够对发布 API 进行 API 调用并获取有关我的 repo 的信息,但 不能将资产上传到同一个仓库。 “未找到”错误响应根本没有暗示这一点。在您的 personal access tokens page 中检查您的令牌的权限,并确保在适当的情况下检查了 repo 和/或 public_repo

【讨论】:

    【解决方案3】:

    请注意,对于 Enterprise 风格的 GitHub,上传 url 与“github.com”的格式不同,您应该使用创建/查询发布时返回的“upload_url”:Get Release API Docs

    例如,这是从我们的企业 github 服务器返回的内容(稍微修改以保护有罪者):
    "upload_url": "https://git.example.com/api/uploads/repos/example-owner/example-repo/releases/5/assets{?name,label}",

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 2014-04-06
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多