ruby-on-rails - 文件字段上传的 rails 内容类型不正确

标签 ruby-on-rails ruby-on-rails-3 pdf content-type

我们使用 rails 助手为 pdf 文档上传文件 file_field在我们的系统中。我们从 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

还有其他想法吗?这正常吗,还有什么奇怪的事情发生吗?浏览器是否正常运行?

最佳答案

默认情况下,rails 表单助手:file_field允许上传所有 MIME 文件类型,所以这就是为什么你拥有上面列出的所有文件类型的原因。

在 Rails 中,如果您使用 file_field_tagform.file_field ,您可以使用 accept 指定 mime/content_type选项并列出用户可以上传的所有类型。
:accept - 如果设置为一种或多种 MIME 类型,用户在选择文件时将被建议使用过滤器。您仍然需要设置模型验证。

来源:

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 将更易于使用和管理上传的文件类型,它允许调整上传的许多选项,因此如果您将应用程序更新到 Rails 3,这对您来说是一个很好的解决方案。

投票是否有帮助。

关于ruby-on-rails - 文件字段上传的 rails 内容类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921496/

相关文章:

ruby-on-rails - Rails 外部 API 测试

javascript - 将 html ID 添加到 rails 选择选项

ruby-on-rails-3 - Rails 3 - 默认情况下未在 Controller 上加载索引操作

pdf - 对某些 PDF 文件使用\LaTeX\includegraphics 时出现问题

java - 使用 Java 将 PDF 转换为 XML

ruby-on-rails - 多线程并发 Capybara 请求?

ruby-on-rails - Rails3 activerecord 连接无法返回连接表中的值?

ruby-on-rails - 载波水印图像

ruby-on-rails - 在 Rails 中使用 Devise 3. 添加多个角色?

javascript - 从pdf文件中读取注释