从回形针附件创建 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) }