GitLab 存档超过 API 在 zip 中创建无尽的 zip

GitLab archive over API creating endless zips inside zips

我正在使用 GitLab API 创建存储库档案,当我这样做时,它会创建一个 zip 文件,里面有一个 zip,里面有一个 zip,等等。

这是发出请求的代码:

def self.get_archive(project_id, branch)
    request = Typhoeus::Request.new(
        BASE_URL + "/projects/#{project_id}/repository/archive?sha=#{branch}",
        method: :get,
        params: nil,
        headers: {
            "PRIVATE-TOKEN": ADMIN_TOKEN
        }
    )

    request.run

    response = request.response

    if response.success?
        file_name = "archive-#{SecureRandom.hex(5)}.zip"

        File.open(Rails.root + "public/archives/" + file_name, "wb") do |file|
            file.write(response.body)
        end

        return {
            success: true,
            file_path: "/archives/" + file_name
        }
    else
        return {
            success: false,
            response_raw: response
        }
    end
end

有什么问题吗?我的想法是把我拿回来的二进制文件写入一个 zip 文件。

所以事实证明 GitLab 默认发回一个 tar.gz 文件。要接收 Zip 文件,您必须在请求末尾明确指定 .zip 扩展名。像这样:

"/projects/#{project_id}/repository/archive.zip?sha=#{branch}"

"archive" 末尾的 .zip 是重要因素。