从回形针附件创建 zip 文件并下载
Create zip from paperclip attachments and download
试图创建一个包含很多图片的zip文件,我的代码如下:
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |p|
image_url = p.picturefile.url(:original)
zos.put_next_entry p.picturefile_file_name
zos.print(URI.parse(image_url))
end
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "pictures.zip"
这会创建一个 pictures.zip 文件,但它只包含每个图像的文本 - url 而不是实际图像...
现在您只是将图像的 URL 传递给文件。您需要做的是将行内容传递给它。
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |p|
zos.put_next_entry p.picturefile_file_name
zos.print(Paperclip.io_adapters.for(p.picturefile).read)
end
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "pictures.zip"
添加到上面提供的解决方案中,
如果您想将其保存在本地并提供稍后下载此 zip 文件的路径或通过 API
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |pic|
zos.put_next_entry pic.upload_file_name
zos.write(Paperclip.io_adapters.for(pic.upload.url).read)
end
end
File.open("#{Rails.root}/public/system/#{file_name}", 'wb') { |f| f.write(compressed_filestream.string) }
试图创建一个包含很多图片的zip文件,我的代码如下:
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |p|
image_url = p.picturefile.url(:original)
zos.put_next_entry p.picturefile_file_name
zos.print(URI.parse(image_url))
end
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "pictures.zip"
这会创建一个 pictures.zip 文件,但它只包含每个图像的文本 - url 而不是实际图像...
现在您只是将图像的 URL 传递给文件。您需要做的是将行内容传递给它。
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |p|
zos.put_next_entry p.picturefile_file_name
zos.print(Paperclip.io_adapters.for(p.picturefile).read)
end
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "pictures.zip"
添加到上面提供的解决方案中,
如果您想将其保存在本地并提供稍后下载此 zip 文件的路径或通过 API
compressed_filestream = Zip::OutputStream.write_buffer do |zos|
@pictures.each do |pic|
zos.put_next_entry pic.upload_file_name
zos.write(Paperclip.io_adapters.for(pic.upload.url).read)
end
end
File.open("#{Rails.root}/public/system/#{file_name}", 'wb') { |f| f.write(compressed_filestream.string) }