我使用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出现了问题(极不可能)。
非常感谢任何朝着正确方向的推动。
答案 0 :(得分:0)
我遇到了与Gitlab相同的问题。在我的情况下下载为tar工作正常。我还发现下载的ZIP文件实际上包含所有数据,但已损坏。如果安装了Java,仍可以恢复ZIP文件中的数据:
jar xvf corrupted-zip-file.zip
答案 1 :(得分:0)
您下载的可能是GZipped TARball。
您应将.zip
扩展名放在要访问的URL的末尾。