2010-04-13 59 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

相关问题