如果您让 Paperclip + AWS S3 在您的 rails 3 应用程序中工作,并且您想要压缩与模型相关的附件,如何继续?
问问题
621 次
1 回答
4
注意:stackoverflow 上的一些问题已经过时,一些回形针方法已经消失。
假设我们有一个用户,它:has_many => user_attachments
GC.disable
@user = User.find(params[:user_id])
zip_filename = "User attachments - #{@user.id}.zip" # the file name
tmp_filename = "#{Rails.root}/tmp/#{zip_filename}" # the path
Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE) do |zip|
@user.user_attachments.each { |e|
attachment = Paperclip.io_adapters.for(e.attachment) #has_attached_file :attachment (,...)
zip.add("#{e.attachment.original_filename}", attachment.path)
}
end
send_data(File.open(tmp_filename, "rb+").read, :type => 'application/zip', :disposition => 'attachment', :filename => zip_filename)
File.delete tmp_filename
GC.enable
GC.start
诀窍是禁用 GC 以避免Errno::ENOENT
异常。GC 会在压缩之前从 S3 中删除下载的附件。
资料来源:
主文件中的 to_file 损坏?
io_adapters.for(object.attachment).path 随机失败
于 2012-12-18T15:05:18.773 回答