【问题标题】:validate size of upload using Carrierwave使用 Carrierwave 验证上传大小
【发布时间】:2011-01-20 21:54:12
【问题描述】:

在我们最新的应用程序中,我们需要处理一些上传,我之前使用过回形针,一切正常!但是我们正在尝试carrierwave,它看起来很有希望,但是我找不到如何验证附件的大小,似乎documentation 没有任何信息关于它,我们是否应该通过自定义验证器将其手动添加到模型中?

提前致谢!

【问题讨论】:

  • 似乎他们还没有(还)刚刚将此自定义验证器添加到我的模型中,=> gist.github.com/795665
  • 我自己正在使用上述解决方案。请注意,这只会在图像存储在缓存中后验证图像的大小。在客户端验证方面,我仍然在寻找自己
  • 如果您想保护您的网站免于上传大得离谱的文件,CarrierWave 验证将无济于事,而是学习how to secure server。如果您想要对视频和图像设置不同的大小限制,或者想要验证最小文件大小,CarrierWave 文件大小验证可能会很有用。

标签: ruby-on-rails carrierwave


【解决方案1】:

【讨论】:

  • 这会在文件上传后进行验证,这对于使用 Amazon S3 的用户来说可能是个问题。
  • 是的,我正在寻找在文件上传之前进行验证的方法。
  • 如果上传前需要验证,可以使用file validatorsgem。
【解决方案2】:

我制作了一个活动模型File Validators gem,它检查 Carrierwave、PaperClip、Drangonfly、Refile 的内容类型和文件大小验证(希望它可以与其他上传解决方案一起使用)。它根据文件的内容检测内容类型,并且它有一个媒体类型欺骗检测器。它在上传之前和之后都有效。

【讨论】:

    【解决方案3】:

    1.0 版本以来,CarrierWave 具有内置的文件大小验证功能。

    安装最新的carrierwave gem

    gem 'carrierwave', '~> 1.0'
    

    添加方法size_range 以提供最小尺寸和最大尺寸

    class ImageUploader < CarrierWave::Uploader::Base
      def size_range
        0..2.megabytes
      end
    

    在模型中添加validates_integrity_of 以验证图像的文件大小(和内容类型)。

    class Image < ApplicationRecord
      mount_uploader :image, ImageUploader
    
      validates_integrity_of :image
    

    【讨论】:

      【解决方案4】:

      Here is the solution 我想出了 - 诀窍是我无法直接检查文件大小,因为如果文件没有上传,这会导致 Fog RubyGem 炸弹。我希望有一种更简洁的方式来询问 CarrierWave 是否上传了文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-19
        • 2011-06-24
        • 1970-01-01
        • 2011-04-12
        • 2012-04-12
        • 1970-01-01
        相关资源
        最近更新 更多