Откуда скрепка получает имя исходного файла? - PullRequest
10 голосов
/ 13 апреля 2010

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

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

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

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

1 Ответ

19 голосов
/ 13 апреля 2010

Браузер отправляет заголовок 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.

...