【问题标题】:@content_type in paperclip gem returns different value回形针 gem 中的 @content_type 返回不同的值
【发布时间】:2016-04-12 19:17:35
【问题描述】:

在 Windows 中,我得到:

@content_type="application/octet-stream"

完整的跟踪:

"attachments_attributes"=>{"0"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x007f7bb52becc8 @original_filename="ms_document.doc", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"post[attachments_attributes][0][attachment]\"; filename=\"doc\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20160108-8859-x51qhj>>}}}

在 Linux 中我得到:

@content_type="application/msword"

完整的跟踪:

"attachments_attributes"=>{"0"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x007f7bb5d585d0 @original_filename="ms_document.doc", @content_type="application/msword", @headers="Content-Disposition: form-data; name=\"post[attachments_attributes][0][attachment]\"; filename=\"doc.doc\"\r\nContent-Type: application/msword\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20160108-8859-9m1xgv>>}}}

问题是,为什么我在上传相同文件但只有不同操作系统时收到不同的@content_type。

我正在使用:

  1. 导轨 3
  2. 回形针'4.3.2'

【问题讨论】:

  • 例如,CSV 也会遇到这种情况。在安装和未安装 Excel 时,您甚至可以获得 Windows 计算机的不同内容类型。因此,如果您将回形针配置为进行内容类型验证或防止内容类型欺骗,则需要处理所有这些text/plaintext/csvtext/comma-separated-valuesapplication/vnd.ms-excel

标签: ruby-on-rails ruby-on-rails-3 paperclip


【解决方案1】:

HTTP 规范 here 声明

当消息中包含实体主体时,该主体的数据类型由标头字段 Content-Type 和 Content-Encoding 确定。这些定义了一个两层的有序编码模型:

entity-body := Content-Encoding( Content-Type( data ) ) Content-Type 指定底层数据的媒体类型。内容编码可能 用于指示应用于 数据,通常用于数据压缩,是一种属性 请求的资源。没有默认编码。

任何包含实体主体的 HTTP/1.1 消息都应该包含一个 定义该主体的媒体类型的 Content-Type 标头字段。如果和 仅当媒体类型不是由 Content-Type 字段给出时, 接收者可以尝试通过检查其媒体类型来猜测媒体类型 URI 的内容和/或名称扩展名,用于标识 资源。如果媒体类型仍然未知,接收者应该 将其视为“application/octet-stream”类型。

在您的情况下,这可能已经发生,因为发送/上传文件的服务器无法确定文件的类型,因为浏览器可能没有在 HTTP 消息中设置 Content-Type发送文件。

这取决于您使用的浏览器和操作系统。 Windows 上的浏览​​器可能没有设置内容类型。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多