GitLab API - 无法访问目录中的文件

时间:2018-04-17 22:14:03

标签: gitlab gitlab-api

我有一个GitLab项目,其设置如下:

  • myserver.com/SuperGroup/SubGroup/SubGroupProject

以下项目的树是顶级txt文件和目录中的txt文件。我从GitLab API获取树:

  • myserver.com/api/v4/projects/1/repository/tree?recursive=true
  

[{ “ID”: “aba61143388f605d3fe9de9033ecb4575e4d9b69”, “名称”: “mydirectory中”, “类型”: “树”, “路径”: “mydirectory中”, “模式”: “040000”},{ “ID” : “0e3a2b246ab92abac101d0eb2e96b57e2d24915d”, “名称”: “1stLevelFile.txt”, “类型”: “斑点”, “路径”: “mydirectory中/ 1stLevelFile.txt”, “模式”: “100644”},{ “ID”:” 3501682ba833c3e50addab55e42488e98200b323" , “名称”: “top_level.txt”, “类型”: “斑点”, “路径”: “top_level.txt”, “模式”: “100644”}]

如果我要求top_level.txt的内容,则会通过以下方式返回,但不会出现任何问题:

  • myserver.com/api/v4/projects/1/repository/files/top_level.txt?ref=master

但是我尝试使用任何API调用都无法访问myDirectory/1stLevelFile.txt。 E.g:

  • myserver.com/api/v4/projects/1/repository/files/"myDirectory%2F1stLevelFile.txt"?ref=master 和,
  • myserver.com/api/v4/projects/1/repository/files/"myDirectory%2F1stLevelFile%2Etxt"?ref=master

结果:

  

未找到在此服务器上找不到请求的URL /api/v4/projects/1/repository/files/myDirectory/1stLevelFile.txt。   myserver.com端口443上的Apache / 2.4.25(Debian)服务器

  • myserver.com/api/v4/projects/1/repository/files/"myDirectory/1stLevelFile.txt"?ref=master
  • myserver.com/api/v4/projects/1/repository/files?ref=master&path=myDirectory%2F1stLevelFile.txt

结果:

  

错误“404 Not Found”

组件的版本是:

GitLab 10.6.3-ee
GitLab Shell 6.0.4
GitLab Workhorse v4.0.0
GitLab API v4
Ruby 2.3.6p384
Rails 4.2.10
postgresql 9.6.8

根据我的研究,有一个类似的错误已通过10.0.0更新修复。

我也添加了我的ssh-key,虽然我怀疑它有什么影响,遵循同样issue in php的建议。

解决方案: 我最终通过调整服务器上安装的apache解决了这个问题。 只需按照以下说明操作:https://gitlab.com/gitlab-org/gitlab-ce/issues/35079#note_76374269

1 个答案:

答案 0 :(得分:0)

根据您的代码,我会认为您使用curl

如果是这种情况,为什么要在文件路径中添加双引号? doc不包含它。

你可以这样测试吗? curl --request GET --header 'PRIVATE-TOKEN: XXXXXXXXX' myserver.com/api/v4/projects/1/repository/files/myDirectory%2F1stLevelFile%2Etxt?ref=master