paperclip从何处获取原始文件的名称?

时间:2010-04-13 15:54:18

标签: ruby-on-rails file-upload paperclip

我开始使用nginx上传模块(创建上传文件,如/ tmp / 000121545),但我需要回形针在保存文件时使用原始文件名(如/public/avatars/LuckyLuke.jpg)

以前参数中的Rails只是传递

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

也没有原始文件名,所以我想知道它在哪里来回形针?我尝试查看插件代码,但它对我来说目前有点过于复杂。

1 个答案:

答案 0 :(得分:19)

浏览器发送带有文件名的http标头。 (“Content-Disposition:filename = original_file.jpg”)

Rails使其可用作临时文件对象的实例方法:params[:avatar].original_filename,而paperclip使用它。

详细地说,Rack在Rack :: Utils :: Multipart :: UploadedFile中解析multipart表单,并在包含:tempfile:filename的参数中放入一个哈希值。然后ActionDispatch :: Http :: Upload出现并用File对象替换该哈希值(值:tempfile),用模块ActionDispatch :: Http :: UploadedFile扩展它,为original_path添加一个实例变量,方法original_filename