我收到此错误
undefined method `file' for #<String:0x007ffaf0049a28>
尝试显示文件的content_type(例如图像/ jpg)时。我正在使用Carrierwave + Jquery文件(经过大量修改,以我想要的方式一起工作)+ Amazon s3(click this to see what I'm doing)。它之前只有载波和&amp;亚马逊s3,但当我添加了jquery文件上传&amp;直接s3,它不再工作了。
有人可以帮帮我吗?这就是我正在做的事情:
<%= @post.attach.file.content_type %>
提前谢谢你&amp;如果您需要更多代码/信息,请告诉我
@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::MimeTypes process :set_content_type
答案 0 :(得分:1)
您是否存储了内容类型,即使用carrierwave-meta
gem?
文件不具有mime类型,多部分形式的部分具有。
Carrierwave可以在上传文件时获取文件的mime_type
因此,将其作为元数据与上传的文件一起存储是很常见的。
安装carrierwave-meta
并添加元数据的字段后(参见github page of carrierwave-meta),您可以
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))
答案 1 :(得分:0)
这里有点难以辨别,但看起来你的“附加”值是“#”(一个字符串)。尝试做类似的事情......
<%= @post.attach.inspect %>
要确定,甚至只是......
<%= @post.inspect %>
看看它们是什么。 “附加”是否应该是“附件”?