如何通过GitLab REST API获取文件的原始内容?

如何通过GitLab REST API获取文件的原始内容?,git,rest,gitlab,Git,Rest,Gitlab,以下GitLab API的REST Url为我提供了一个项目的存储库树 获取回购树(工程) 输出: [ { "id": "a49d11794ed56db7f935abfd61002aef67159d10", "name": "src", "type": "tree", "path": "src", "mode": "040000" }, { "id": "0fbd98527d4

以下GitLab API的REST Url为我提供了一个项目的存储库树

获取回购树(工程)

输出:

[
    {
        "id": "a49d11794ed56db7f935abfd61002aef67159d10",
        "name": "src",
        "type": "tree",
        "path": "src",
        "mode": "040000"
    },
    {
        "id": "0fbd98527d4b36e3d22c164293d8fd8eee4d18cd",
        "name": ".gitignore",
        "type": "blob",
        "path": ".gitignore",
        "mode": "100644"
    },
    {
        "id": "0ef0da472176f2e6a24843ac9d4bb738c8310d23",
        "name": "pom.xml",
        "type": "blob",
        "path": "pom.xml",
        "mode": "100644"
    }
]
但我无法获得文件pom.xml的原始内容

获取文件的原始内容(不起作用-提供404)

输出:

{
    "error": "404 Not Found"
}

根据这里的文档()我指定了正确的RESTURL。然而,唯一不同的是在RESTAPI端点中使用V4而不是V3。我四处搜索,但找不到v3 api的端点。

首先,以防万一,不要对“.”进行百分比编码:

其次,您可以在和中检查从v3到v4文件端点是如何受到影响的

您可以看到示例(在v3中)没有对点进行百分比编码

curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' \
  'https://gitlab.example.com/api/v3/projects/13083/repository/files?file_path=app/models/key.rb&ref=master'
但是,v3api只允许获取原始blob,而不允许获取原始文件。
见:

  • /projects/:id/repository/files
    修改为
    /projects/:id/repository/files/:filepath
    :filepath
    应为URL编码)
  • /projects/:id/repository/blobs/:sha
    移动到
    /projects/:id/repository/files/:filepath/raw
只有v4 API允许使用
:filepath
参数


请参阅“”,以解码从API v3获得的原始blob。

非常感谢,我使用以下url获得了文件内容:
https://gitlab.gspt.net/api/v3/projects/2931/repository/files?file_path=pom.xml&ref=master
。但是,文件的内容是经过编码的。如何获取原始内容?@user2325154使用我在回答中提到的
/projects/:id/repository/raw\u blobs/:sha
语法:请参阅不确定在
:sha
中指定什么。
:sha
是文件的提交id吗?我查看了您提供的链接,但没有提到如何获取文件的原始内容。我从上述url获得的内容是
base64
encoded。我总是可以解码,得到文件的实际原始内容。但是有没有办法直接获取文件的原始内容?@user2325154再次查看,我在v3中没有看到原始文件内容的语法。似乎在v4中添加它只是为了回答:我已经相应地编辑了答案,包括一个链接()来解码原始blob。所以:“有没有办法直接获取文件的原始内容”:v3中没有。。仅在v4中。
{
    "error": "404 Not Found"
}
.../files/pom.xml/raw?...
            ^^
v3:
GET /projects/:id/repository/raw_blobs/:sha
v4:
GET /projects/:id/repository/blobs/:sha/raw
curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' \
  'https://gitlab.example.com/api/v3/projects/13083/repository/files?file_path=app/models/key.rb&ref=master'