使用RubyZip将远程文件存储在Zip中



我有一个名为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库处理压缩远程文件吗?还是有更好/更简单的方法?

谢谢!

我遇到过同样的问题,我已经找到了一个解决方案。所以我把它分享给大家,也许能帮到别人。

您可以将任何远程文件添加到zip中,而无需将其保存在临时文件中,然后从临时文件中读取它,最后删除临时文件。

创建zip并在其中添加远程文件

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

如果你想在temp_zip上面添加任何本地文件,那么你可以再次打开它:

再次打开此压缩文件并添加所需的任何本地文件

zipfile = Zip::File.open(tmp_zip)
zipfile.add("report.pdf", my_pdf_path)
zipfile.close

一种选择是本地挂载s3。有很多方法可以使用ftp,比如程序员,也有专门的程序。这也取决于你运行的操作系统。

我没有看到使用远程URL通过zip传输压缩的方法。

相关内容

  • 没有找到相关文章

最新更新