【问题标题】:rails content-type for file_field uploads is incorrectfile_field 上传的 rails 内容类型不正确
【发布时间】:2014-05-28 20:43:14
【问题描述】:

我们使用系统中的 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

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

【问题讨论】:

  • 所有具有content_type 不同值的文档实际上都是PDF吗?是否对传入文件进行任何验证以确保仅保存 PDF?
  • 是的,它们是 pdf,我浏览并检查了它们。
  • 出于好奇 - 这种不正确的内容类型会导致什么问题? PDF 不会显示或无法以某种方式下载或管理?
  • 我们存储内容类型以确定以后如何显示它以及是否转换它。解决方法工作正常,但这似乎是一个 html/rails 错误。

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


【解决方案1】:

默认情况下,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,它对您来说将是一个很好的解决方案。

如果有帮助,请投票。

【讨论】:

  • 我认为这会使事情变得更糟,不确定您是否理解我的问题,但实际的 pdf 正在与生产中的其他内容类型一起出现。如果我在 content_type 上进行验证,那么它将拒绝用户上传 pdf。谢谢,我知道回形针 gem,但我认为这个问题与 html/浏览器如何将文件发送到 rails 有关。
  • 那么对不起。正如你所说,我误解了你的问题。
  • :content_type => /\Aapplication\/pdf/ 解决了我的问题。由于某种原因,我在其他地方找到的 content_type: { content_type: ['application/pdf'] } 代码对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 2015-05-22
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多