使用GitLab的API下载的GitLab存档库似乎已损坏

时间:2015-03-31 07:07:17

标签: php curl gitlab

我使用cURL使用他们的API从GitLab下载存储库。所有这些都是使用PHP完成的。代码如下:

$zipResource = fopen('archive.zip', 'w');

$ch = curl_init("http://example.com/api/v3/projects");

curl_setopt($ch, CURLOPT_HTTPHEADER, array("PRIVATE-TOKEN: private_token_goes_here"));

curl_setopt($ch, CURLOPT_URL, "http://example.com/api/v3/projects/64/repository/archive");

curl_setopt($ch, CURLOPT_FILE, $zipResource);

curl_exec($ch);

curl_close($ch);

简要概述:创建一个空的zip文件。连接到服务器,获取存档并将其写入zip文件。

存档显示在服务器上,我可以下载它,当我双击它时,我可以解压缩它,所有文件都在那里,一切似乎都是有序的。

但是,当我尝试使用终端解压缩时会弹出以下错误:

Archive:  archive.ZIP
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.

到目前为止我尝试的是:

将标题设置为"Content-type: application/zip"。将标头设置为"Content-Transfer-Encoding: Binary"(存档文件类型位于'wb' //binary)或"Content-type: application/octet-stream",依此类推。最终结果始终相同,这意味着我在尝试解压缩存档时会收到上述错误。

我只能假设我没有正确使用cURL,没有正确设置标头,或者他们的API出现了问题(极不可能)。

非常感谢任何朝着正确方向的推动。

2 个答案:

答案 0 :(得分:0)

我遇到了与Gitlab相同的问题。在我的情况下下载为tar工作正常。我还发现下载的ZIP文件实际上包含所有数据,但已损坏。如果安装了Java,仍可以恢复ZIP文件中的数据:

jar xvf corrupted-zip-file.zip

答案 1 :(得分:0)

您下载的可能是GZipped TARball。 您应将.zip扩展名放在要访问的URL的末尾。