ruby-on-rails - 在上传到 S3 之前,如何在服务器上将文件验证为图像?

标签 ruby-on-rails ruby file-upload amazon-s3

流程是:

  • 用户在客户端选择一张图片。
  • 只有文件名、内容类型和大小被发送到服务器。 (例如“file.png”、“image/png”、“123123”)
  • 响应是直接上传到 S3 的字段和策略。 (例如“键:xxx,”alc:...)

案例是,如果我将“file.pdf”的扩展名更改为“file.png”然后上传,则在上传到S3之前发送到服务器的数据是:

  • “文件.png”
  • “图片/png”

服务器说“ok”并返回用于上传的 S3 字段。

但是发送的内容类型不是真正的内容类型。但是我如何在服务器上验证它呢?

谢谢!


例子:

测试 Redactorjs 服务器端代码 ( https://github.com/dybskiy/redactor-js/blob/master/demo/scripts/image_upload.php ) 它检查文件内容类型。但是尝试上传假图片(在此处测试:http://imperavi.com/redactor/),它不允许假图片。如我所愿!

但这怎么可能呢?查看请求参数:(它以 image/jpeg 形式发送,应该是有效的)

enter image description here

最佳答案

当我在工作中处理这个问题时,我找到了使用 Mechanize 的解决方案。

假设你有一个图片 url,url = "http://my.image.com"

然后你可以使用img = Mechanize.new.get(url)[:body]

测试 img 是否真的是图像的方法是发出以下测试:

img.is_a?(Mechanize::Image)

如果图像不合法,将返回 false。

可能有一种方法可以从文件而不是 URL 加载图像,我不确定,但我建议查看 mechanize 文档进行检查。

关于ruby-on-rails - 在上传到 S3 之前,如何在服务器上将文件验证为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17850052/

相关文章:

ruby-on-rails - Rails - form_for select 显示我来自数据库的类别

ruby-on-rails - 主机是否必须支持 "Ruby on Rails"或 "just Ruby"才能运行 Rails?

ruby-on-rails - Rails 如何检测日期是否连续?

jquery - 非 ascii 字符仅在 Safari 浏览器中添加表单输入

java - 在java中保留文件扩展名的同时重命名文件

ruby-on-rails - Rails 4,设计登录规范失败?

ruby-on-rails - 在 ruby​​ sqlite3 中更改列日期列格式

Ruby `send` 与 `call` 方法

ruby - 使用 Ruby 在浏览器中打开图像

javascript - 错误 : Firebase. 设置失败:第一个参数在属性 'achv_img' 中包含未定义