2013-06-02 72 views
0

試圖顯示文件的CONTENT_TYPE(例如:圖像/ JPG)時,我得到這個錯誤「未定義的方法`文件爲#<String:0x007ffaf0049a28>」在Rails中?

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

。我正在使用Carrierwave + Jquery文件(這兩個文件都經過嚴格修改,以我想要的方式一起工作)+ Amazon s3(click this to see what I'm doing)。它正在工作之前,只是載波&亞馬遜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 

回答

1

您是否儲存了內容類型,即carrierwave-meta寶石?
文件沒有MIME類型,多部分形式的部分有。
Carrierwave在上傳時可以獲得文件的mime_type
所以通常將其作爲元數據與上傳的文件一起存儲。

一旦你carrierwave-meta安裝並增加了對元數據的字段(見github page of carrierwave-meta),你可以

process :set_content_type 
    process :store_meta 
在你上傳

,並訪問與

@post.attach.content_type 

您的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)) 
+0

我看了一下gem,但它在將修改後的直接上傳添加到s3之前正在工作(請參閱原始問題中的鏈接)。在我的carrierwave上傳器中,我有'包含CarrierWave :: MimeTypes process:set_content_type'我現在正在實現這個gem,但我看不到它會做什麼不同。無法通過離開文件ext來提升content_type? @Martin – Jon

+0

我正在使用'storage:fog' btw @Martin&我在模型中沒有使用「mount_uploader」。它直接上傳到s3 – Jon

+0

我將lookup_by_extension添加到我的回答中 –

0

一點點這裏很難說,但它看起來像你的「附加」價值「#」(字符串)。嘗試做類似...

<%= @post.attach.inspect %>

看到肯定,甚至只是......

<%= @post.inspect %>

,看看它們是什麼。 「附加」可能是「附件」嗎?

+0

只是我在這兩種情況下得到了編輯我上面的問題 – Jon

+0

我在上面的原始問題中得到了編輯@slabounty – Jon

相關問題