我们在系统中使用rails helper file_field
为pdf文档上传文件。我们从rails 2开始,现在使用rails 3大约一年。
在我们的数据库中查看pdf content/type
到处都是。
我的理解是它始终应该是application/pdf
但这是我们收到的类型列表:
application/x-octetstream
application/octet
application/x-download
binary/octet-stream
text/html
application/application/pdf
application/download
application/x-download
text/javascript
text/html
text/csv
我现在可以看到正确设置内容类型的唯一工作是检查文件正文(类似这样)
if (upload_doc_name_ext == "pdf") && (incoming_file.content_type != "application/pdf") && (incoming_file[0..10].match(/%PDF-/) != nil)
incoming_file.content_type = 'application/pdf'
end
还有其他想法吗?这是正常的,还有其他奇怪的事吗?浏览器是否正常运行?
答案 0 :(得分:2)
默认情况下,rails form helper:file_field
允许上传所有MIME文件类型,因此这就是为什么你拥有上面列出的所有内容的原因。
在rails中,如果您使用file_field_tag
或form.file_field
,则可以使用accept
选项指定mime / content_type,并列出用户可以上传的所有类型。
:accept
- 如果设置为一个或多个mime-types,则在选择文件时会建议用户使用过滤器。您仍然需要设置模型验证。
来源:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-file_field
无论如何,我建议使用paperclip gem并指定content_type
验证。
class ActiveRecord::Base
has_attached_file :document
# Validate content type
validates_attachment_content_type :document, :content_type => /\Aapplication\/pdf/
end
Paperclip将更易于使用和管理上传的文件类型,它允许调整许多oprions进行上传,因此如果您将应用程序更新到Rails 3,它将成为您的好方法。
投票是否有帮助。