【问题标题】:Paperclip: Download all files in a compressed format回形针:以压缩格式下载所有文件
【发布时间】:2014-04-07 08:46:53
【问题描述】:

在 rails 3.2.13 中,我使用回形针 gem 进行文件上传。我希望所有附件都下载到一个压缩文件夹中。

我正在使用下面的 gem

rubyzip (1.1.3)

如果我使用下面的代码,会得到类似“未初始化的常量 Zip::ZipFile”的错误

@assets = Assets::Resume.all

tmp_filename = "#{Rails.root}/tmp/tmp_zip_" <<
  Time.now.strftime("%Y%m%d%H%M%S").to_s <<
  ".zip"
Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE) do |zip|
  @assets.each do |e|
    zip.add("#{e.document.original_filename}", e.document.url)
  end
end

send_data(File.open(tmp_filename).read, :type => 'application/zip', :disposition => 'attachment', :filename =>"#{current_user.id}_cvs.zip")
File.delete tmp_filename

为了克服这个问题,我修改了这段代码,如下所述。修改后,我得到一个包含空数据(无文件)的 .zip 文件。

@assets = Assets::Resume.all

tmp_filename = "#{Rails.root}/tmp/tmp_zip_" <<
  Time.now.strftime("%Y%m%d%H%M%S").to_s <<
  ".zip"
Zip::File.open(tmp_filename, Zip::File::CREATE) do |zip|
  @assets.each do |e|
    zip.add("#{e.document.original_filename}", e.document.url)
  end
end

send_data(File.open(tmp_filename).read, :type => 'application/zip', :disposition => 'attachment', :filename =>"#{current_user.id}_cvs.zip")
File.delete tmp_filename

请帮我解决这个问题。

【问题讨论】:

    标签: ruby-on-rails ruby zip paperclip


    【解决方案1】:

    尝试使用 e.document.path 而不是 e.document.url。

    【讨论】:

    • 之后我也得到了空的 .zip 文件。
    • 在每个循环中执行 put "e.document.path" 并查看其在 log/stdout 中的打印是否正确。还要检查在 rails root 的 tmp 目录中创建 tmp_filename 的权限问题。
    • puts "e.document.path" 没有打印。循环未执行。
    • 意味着@assets 是空的。检查您如何获取所有要下载的资产。我不瘦 @assets = Assets::Resume.all 正在工作。
    • 是的。我修复了这个@assets 问题。出于测试目的,我上传了一些重复文件,但现在我收到类似“添加失败。条目 240392.pdf 已存在”之类的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2011-02-09
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多