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