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 是重要因素。
我正在使用 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 是重要因素。