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

时间:2014-02-27 20:35:06

标签: ruby-on-rails ruby zip carrierwave rubyzip

我有一个红宝石应用程序,自由职业者可以为雇主完成工作。作业完成后,自由职业者可以上传文件供雇主审核。我认为自由职业者应该能够上传zip文件,但我不希望自由职业者能够上传无效或损坏的zip文件。有没有办法停止此操作或检查文件是否有效。我很确定如果有一个方法或函数来执行此操作,它将在rubyzip库中,但我查看了他们的文档,无法找到我正在寻找的内容。

2 个答案:

答案 0 :(得分:4)

这是一个天真的解决方案,尝试打开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校验和。如果你确实需要它超快,你可以从文件中读取它们并检查你计算的校验和。

答案 1 :(得分:0)

另一种简单的方法是仅在这种情况下检查文件是否正在上传。

file = params[:file]

file.content_type.in?(['application/zip'])