2

我正在使用一个 api,它在 http 响应的正文内容中回复一个 zip 文件。我可以使用 zip-ruby wiki ( https://bitbucket.org/winebarrel/zip-ruby/wiki/Home )中的示例解压缩文件并将每个文件写入磁盘:

Zip::Archive.open('filename.zip') do |ar|  # except I'm opening from a string in memory
  ar.each do |zf|
    if zf.directory?
      FileUtils.mkdir_p(zf.name)
    else
      dirname = File.dirname(zf.name)
      FileUtils.mkdir_p(dirname) unless File.exist?(dirname)

      open(zf.name, 'wb') do |f|
        f << zf.read
      end
    end
  end
end

但是,我不想将文件写入磁盘。相反,我想创建一个活动记录对象,并设置一个回形针文件附件:

    asset = Asset.create(:name => zf.name)
    asset.file  = open(zf.name, 'r')
    asset.save

奇怪的是第一个示例中的 open 语句将文件写入磁盘始终如一地工作。但是,当我只想将 zf (Zip::File) 作为内存中的通用文件打开时,有时会得到:

*** Errno::ENOENT Exception: No such file or directory - assets/somefilename.png

如何将 Zip::File zipruby 创建的文件分配给回形针文件而不出现此错误?

4

0 回答 0