Откуда из paperclip получить имя исходного файла?

i начал использовать модуль загрузки nginx (который создает файлы загрузки, такие как /tmp/ 000121545), но мне нужно скрепление для использования исходного имени файла при сохранении файлов (например,/public/avatars/LuckyLuke.jpg)

ранее в параметрах Rails проходили только

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

нет оригинального имени файла, так что мне интересно, откуда он входит в скрепку? Я попытался просмотреть код плагина, но в настоящее время он слишком сложный для меня.

Ответ 1

Браузер отправляет http-заголовок с именем файла. ( "Content-Disposition: filename = original_file.jpg" )

Rails делает это доступным как метод экземпляра временного файлового объекта: params[:avatar].original_filename, а paperclip использует это.

Подробно, Rack анализирует множественную форму в Rack:: Utils:: Multipart:: UploadedFile и помещает хэш в параметры, которые включают :tempfile и :filename. Затем ActionDispatch:: Http:: Upload приходит и заменяет этот хэш объектом File (значение: tempfile), расширяя его с помощью модуля ActionDispatch:: Http:: UploadedFile, который добавляет переменную экземпляра для original_path и метод original_filename.