无法通过 API 上传 github 发布资产

Cannot upload github release asset through API

我有一个 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 访问权限。感谢您帮助上传此资产。

您正在向 https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets which is not the upload URL for the release. It should be https://uploads.github.com/repos/cljsinfo/api-docs/releases/1260660/assets 发出 POST 请求。

有关详细信息,请参阅文档:

https://developer.github.com/v3/repos/releases/#upload-a-release-asset

资产上传 URL 的格式为 https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip。有几种可能的原因可能会导致您收到非常无用的 "Not Found" 错误:

  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。您用于上传资产的 URL 与您用于所有其他 API 调用的不同。要获得正确的上传 URL,您使用相同的 releases API,使用上述 tag_name 找到您的版本,并从 JSON 中提取 upload_url 字段回复。这是伊万(已接受)的回答。
  3. 缺少 GitHub 访问令牌权限。这是最让我失望的一个,因为我使用的令牌 能够对版本 API 进行 API 调用并获取有关我的信息回购,但 将资产上传到同一个回购。 "Not Found" 错误响应根本没有暗示这一点。检查 personal access tokens page 中令牌的权限,并确保 repo and/or public_repo 已根据需要进行检查。

请注意,对于企业版 GitHub,上传 url 与 'github.com' 的格式不同,您应该使用 'upload_url' creating/querying 发布:Get Release API Docs

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