2010-04-13 55 views
10

我開始使用nginx的上傳模塊(它創建類似上傳文件的/ tmp/000121545),但我需要回形針使用原來的文件名,而在參數Rails的保存文件(如/public/avatars/LuckyLuke.jpg)從paperclip中獲取原始文件的名稱?

以前正在通過

"avatar"=>#<File:/tmp/RackMultipart20100413-6151-t3ecq0-0> 

沒有原始文件名以及,所以我想知道它從哪裏來回形針嗎?我試圖通過插件代碼來查看,但它對我來說目前有點太複雜。

回答

19

瀏覽器發送一個帶有文件名的http頭。 (「Content-Disposition:filename = original_file.jpg」)

Rails使它成爲臨時文件對象的實例方法:params[:avatar].original_filename,回形針使用它。

詳細地說,Rack解析Rack :: Utils :: Multipart :: UploadedFile中的多部分表單,並在包含:tempfile:filename的參數中加上散列。然後ActionDispatch :: Http :: Upload出現,並用File對象(tempfile的值)替換該散列,並使用ActionDispatch :: Http :: UploadedFile模塊對其進行擴展,該模塊爲original_pathoriginal_filename添加實例變量。

+0

這是內容處理:form-data; NAME = 「文件」;文件名=「file1.txt」 來自:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 – 2010-04-13 16:28:59

+0

嗯,我相信是這樣,但無法找到任何痕跡回寫時在回形針代碼中的「Content-Disposition」。 – 2010-04-14 09:30:03

+1

啊,對不起。我明白你現在要問什麼。我將編輯答案以包括rails如何獲取文件名。 – mckeed 2010-04-14 15:07:04

相關問題