gpt4 book ai didi

ruby-on-rails - 在 rails 中使用 rubzip2 和 paperclip,如何创建一个临时 zip 文件并将其保存到 paperclip?

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

我有一些珍贵的代码可以压缩大量文件,它在 tmp 文件系统中创建了一个 zip 文件并向其中添加了文件。

我试图通过使用 ruby​​ 的 Tempfile 将文件存储在代码中而不是自己手动将其写入 tmp 目录并稍后删除它来提高效率。

我编写这段代码是为了尝试做到这一点......

def zip_up_files
require 'zip/zip'

t = Tempfile.new(["temp-filename-#{export_type}", '.zip'], :type => 'application/zip')
Zip::ZipOutputStream.open(t.path) do |z|
#pop some files in the zip...
end

#save it to the has_attachment :download on the model
self.download = File.open(t.path)
self.save

#delete TempFile...
t.close
end

这成功地将临时文件保存到模型上的 .download 中。但是,如果您现在导航到保存的 zip 文件,它就不是 zip 文件,而是乱码文本文档。我想知道在将 zip 保存到模型之前是否缺少创建或保存 zip 的内容。我试过将类型放入 TempFile 创建中。看起来 zip 缺少 MimeType。但我不确定,有人可以帮忙吗?

谢谢!

最佳答案

问题是,您已经将二进制文件写入磁盘,但随后以文本模式而不是二进制模式打开它。这肯定会弄乱数据。

# Opens in text mode by default!
#self.download = File.open(t.path)

# Change to...
self.download = File.open(t.path, 'rb')

顺便说一下,close 不会删除临时文件。当文件句柄被垃圾回收时,文件将被删除。建议显式调用 unlink 来删除临时文件,否则磁盘上会有大量临时文件等待垃圾回收。 (参见 synopsis and good practices in the TempFile docs 。)

#delete TempFile...
t.close
t.unlink

关于ruby-on-rails - 在 rails 中使用 rubzip2 和 paperclip,如何创建一个临时 zip 文件并将其保存到 paperclip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210575/

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