我已经尝试了一切,现在我似乎不能弄清楚如何添加内容类型验证在载波之前,执行实际处理的文件,我上传。这样做的原因是,我想只允许图像,但用户可以上传欺骗的内容文件,并将file.pdf
文件重命名为file.jpg
。到目前为止,我尝试的步骤:photo_uploader.rb
def content_type_whitelist
/image\//
end
我已经尝试了validate_integrity
在我的上传,但没有运气以及。我还尝试覆盖CarrierWave错误消息(这对我来说似乎很奇怪):
en:
errors:
messages:
content_type_whitelist: "You are not allowed to upload %{content_type} file"
但我从MiniMagic得到一个错误"Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: %{e}"
问题是我想显示rails
验证,这样当内容类型不是我在模型中定义的类型时,它会显示类似"File should be one of image/jpeg, image/png, image/gif"
的消息。所以我需要一种方法来强制Rails验证在图像处理之前触发,尽管我认为这不太可能。
这里他们说CarrierWave::Uploader::MagicMimeWhitelist
应该被包括进来以便执行mime类型验证,所以我尝试了一下,但是得到了uninitialzied constant CarrierWave::Uploader::MagicMimeWhitelist
(之前重启过服务器)
include CarrierWave::Uploader::MagicMimeWhitelist
def whitelist_mime_type_pattern
/image\//
end
我尝试使用carrier-mimetype-fu,但在包含CarrierWave::MimetypeFu
后,我得到了unitilzied constant CarrierWave::MimetypeFu
你有这方面的经验吗?
3条答案
按热度按时间jogvjijk1#
我在回答一个两年前的问题。CarrierWave内容类型白名单仅依赖于文件扩展名。我尝试将SWF文件的扩展名更改为JPG,并在UI上直接得到一个冗长的错误:
花了一整晚的时间寻找解决方案,但在这个问题上得到的太少了。This answer和this wiki帮助了我。
qgelzfjb2#
回答
你应该用
至少文件上是这么说的。这个问题是在不久前提出的,所以文档可能反映了当时完全不同的东西,不确定。我想现在该做什么才是最重要的。
在我正在运行的应用程序中:当尝试上传一个zip文件时,我的
content_type_allowlist
只允许图像内容类型,我得到一个模型错误。这是预期的,我应该只允许图像类型。
代码
task_attached_files.rb
file_uploader.rb
wfsdck303#
请确保您的计算机上有Imagemagick installed
在上传器中,我已包括
根据内容类型过滤图像文件。对于图像文件,必须具有不同的内容类型。