gpt4 book ai didi

ruby-on-rails - Ruby 使用 RubyZip 将远程文件存储在 Zip 中

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:27 24 4
gpt4 key购买 nike

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

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

我正在使用:

 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 上面添加任何本地文件,那么你可以再次打开它:

再次打开这个zip并添加你想要的任何本地文件

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

关于ruby-on-rails - Ruby 使用 RubyZip 将远程文件存储在 Zip 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com