2

我有一个名为 Image 的模型。图像具有使用 Dragonfly 附加的文件,这些文件存储在 S3 中。

我有一个要求,我需要压缩所有图像。

我在用着:

 Zip::ZipFile.open(tmp_zip, Zip::ZipFile::CREATE) do |zipfile|
   zipfile.add("image.jpg", image_path)      
 end

我遇到的问题是,如果image_path是本地的,这可以工作。当您需要为文件调用 S3 时,image_path是远程路径,例如http://example.s3.amazonaws.com/foo/image.jpg,我认为没有 RubyZip 方法可以处理那。

我正在讨论编写从远程路径创建临时文件的东西,将该临时文件添加到 zip,然后删除临时文件。

但在我这样做之前,有没有人知道 RubyZip 或其他一些 zip 库是否处理压缩远程文件?还是有更好/更简单的方法?

谢谢!

4

2 回答 2

4

I have faced same issue and I have found a solution. So I am sharing it, might help someone.

You can add any remote file to zip without saving it in a temp file, then read it from temp file and finally deleting temp file.

create zip and add remote files in it

Zip::OutputStream.open(tmp_zip) do |zos|
   zos.put_next_entry("image.jpg")
   zos.print(URI.parse(image_url).read)    
 end

If you want to add any local files inside above temp_zip then you can open it again:

open this zip again and add any local files you want

zipfile = Zip::File.open(tmp_zip)
zipfile.add("report.pdf", my_pdf_path)
zipfile.close
于 2016-04-15T10:38:13.850 回答
0

一种选择是在本地安装 s3。使用类似 ftp 的程序员有多种方法可以做到这一点,也有专门的程序。这也取决于您正在运行的操作系统。

我看不到使用远程 URL 通过 zip 流式传输 zip 的方法。

于 2011-11-11T00:23:46.970 回答