在Rails中,我可以检查上传的zip文件是否损坏或无效吗?

4

我有一个Ruby应用程序,自由职业者可以为雇主完成工作。当工作完成时,自由职业者可以上传文件供雇主审核。我认为自由职业者应该能够上传zip文件,但是我不希望他们能够上传无效或损坏的zip文件。是否有任何方法来阻止这种情况或检查文件是否有效?我相信如果有一个方法或函数可以做到这一点,它就会在RubyZip库中,但我已经查看了他们的文档,没有找到我要找的内容。

2个回答

7

以下是一种幼稚的解决方案,尝试打开一个Zip存档文件,如果成功则返回true,如果发生错误则返回false

require 'zip'

def valid_zip?(file)
  zip = Zip::File.open(file)
  true
rescue StandardError
  false
ensure
  zip.close if zip
end

我相信ZIP格式包括其内容的CRC32校验和。如果您真的需要快速处理,可以从文件中读取这些校验和,并检查与您计算的校验和是否匹配。

太棒了!非常方便。 - Tim Kretschmer

-1

另一种简单的方法是只需检查此条件,如果文件正在上传。

file = params[:file]

file.content_type.in?(['application/zip','application/x-zip-compressed'])

这将会漏掉一些内容类型,例如 application/x-zip-compressed - Undo
有道理,但是把它添加到数组中很容易处理。 - Ankit Wadhwana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接