流程是:
- 用户在客户端选择一张图片。
- 只有文件名、内容类型和大小被发送到服务器。 (例如“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 形式发送,应该是有效的)
最佳答案
当我在工作中处理这个问题时,我找到了使用 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/