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

标签 ruby-on-rails ruby zip carrierwave rubyzip

我有一个 ruby​​ 应用程序,自由职业者可以在其中为雇主完成工作。工作完成后,自由职业者可以上传文件供雇主审查。我认为自由职业者应该能够上传 zip 文件,但我不希望自由职业者能够上传无效或损坏的 zip 文件。有什么办法可以阻止这种情况或检查文件是否有效。我很确定是否有方法或函数可以执行此操作,它会在 ruby​​zip 库中,但我已经查看了他们的文档,但找不到我要找的东西。

最佳答案

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

关于ruby-on-rails - 在 Rails 中,我可以检查上传的 zip 文件是否损坏或无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079749/

相关文章:

ruby-on-rails - 为多个站点创建可重用博客组件的最佳方式

java - 在 Apache Camel Spring DSL 中使用 ZipSplitter

python - 使用 Python 访问 .zipx

javascript - Rails 在渲染后强制重新加载 javascript

ruby-on-rails - #<User::ActiveRecord_Relation:0x007fdd1adb7a00> Rails 的未定义方法 `friendships'

ruby-on-rails - 坏组件(预期的主机组件): received when running a rake task to send email with roadie on heroku

ruby - 如何配置 Gollum-wiki 以允许基本身份验证并使用用户名进行 git 提交

java - 使用 java.util.zip.* 解压缩使用 Apache POI 创建的 xlsx blob 时失败

javascript - Rails braintree 在输入框的 focusout 上捕获错误

ruby-on-rails - 乘客 parking 写日志