0

我收到此错误

undefined method `file' for #<String:0x007ffaf0049a28>

尝试显示文件的 content_type(例如 image/jpg)时。我正在使用 Carrierwave + Jquery File(两者都经过大量修改以按照我想要的方式协同工作)+ Amazon s3(单击此查看我在做什么)。它以前只使用carrierwave和amazon s3,但是当我添加jquery文件上传和直接s3时,它不再工作了。

有人可以帮我吗?这就是我正在做的事情:

<%= @post.attach.file.content_type %>

提前感谢您,如果您需要更多代码/信息,请告诉我

@post.attach.inspect
# https://sharebook.s3.amazonaws.com/uploads/d4247713-6459-484f-9b8b-f0b7b689e8d9/picture.jpg

@post.inspect
# #<Post id: 1, name: "post title", attach: "https://domain.s3.amazonaws.com/uploads/d4247713...", created_at: "2013-05-29 17:30:46", updated_at: "2013-05-29 17:30:46">

更多信息:我正在使用storage :fog. 在我的carrierwave上传器中,我包含了

CarrierWave::MimeTypes process :set_content_type
4

2 回答 2

1

您是否存储内容类型,即与carrierwave-metagem 一起存储?
文件没有 mime 类型,多部分形式的部分有。
Carrierwave 可以在上传文件时获取文件的 mime_type 。
因此,将其作为元数据与上传的文件一起存储是很常见的。

安装carrierwave-meta并添加元数据字段后(请参阅carrierwave-meta 的 github 页面),您可以

  process :set_content_type
  process :store_meta

在您的上传器中并访问 content_type

@post.attach.content_type

您要求一种通过扩展查找 mime_types 的方法。

文件扩展名只是Win主要使用的提示。Unix 依赖于文件内容(魔术字符等),MacOS 中的元数据存储在资源叉中。说了这么多,有一个方法可以查一下:

Mime::Type.lookup_by_extension 

请参阅Rails API

所以存储在 S3 中的文件的 mime_type:

mime_type = Mime::Type.lookup_by_extension(File.extension(@post.attach.inspect))
于 2013-06-02T21:39:19.520 回答
0

这里有点难说,但看起来你的“附加”值是“#”(一个字符串)。尝试做类似...

<%= @post.attach.inspect %>

确定或什至只是...

<%= @post.inspect %>

看看它们是什么。“附加”是否可能应该是“附加”?

于 2013-06-02T21:32:10.650 回答