RoR: проверка загруженного файла - PullRequest
0 голосов
/ 25 августа 2009

Мне нужно проверить биты загруженного файла, прежде чем он будет сохранен в файловой системе. В документации PHP есть хорошая страница, которая сообщает мне, какие именно свойства доступны для использования (http://us3.php.net/manual/en/features.file-upload.post-method.php),, но я не могу найти что-то подобное для Ruby и / или Rails.

Я также попытался зарегистрировать строку загрузки в формате JSON, но это просто дает мне избыточную ошибку UTF-8. Я не могу придумать ничего другого, чтобы попробовать.

Может ли кто-нибудь предложить какое-нибудь понимание или указать мне правильное место?

Спасибо.

ОБНОВЛЕНИЕ: Я использую Apache 2.2.11 на OS X (Leopard) на случай, если Питер прав (см. Ниже).

ОБНОВЛЕНИЕ: В случае, если это помогает, мой входной параметр регистрируется как "upload"=>#<File:/tmp/RackMultipart.64239.1>. Я просто не уверен, как получить к нему доступ, чтобы добраться до его "частей".

Ответы [ 4 ]

4 голосов
/ 25 сентября 2009

Насколько я был в состоянии сказать или найти, нет физического файла, пока загрузка не будет прочитана. Это соответствует ответу Дерфреда. Единственные метаданные, к которым можно получить доступ:

uploaded_file.content_type  # the uploaded file's MIME type
uploaded_file.original_path # which is really just the name of the file

Кроме того, в uploaded_file существует метод read, который позволяет осуществлять доступ к содержимому файла и, по-видимому, записывать в постоянную файловую систему.

Еще кое-что, что я заметил, это то, что only означает, что Ruby предлагает проверить тип файла MIME в этом свойстве content_type загруженного файла. Как только файл находится в файловой системе, больше не существует способа доступа или определения типа MIME.

0 голосов
/ 25 августа 2009

AFAIK Rails и различные серверы приложений полностью абстрагируют часть загрузки. Однако вот подробное обсуждение темы: http://www.jedi.be/blog/2009/04/10/rails-and-large-large-file-uploads-looking-at-the-alternatives/

0 голосов
/ 26 августа 2009

Это просто объект File, который вы можете скопировать, набрав:

File.open("some_file")

/ tmp / RackMultipart.64239.1 - это просто имя файла.

Если вы хотите увидеть / вывести его содержимое из контроллера:

 puts params[:upload].read
0 голосов
/ 25 августа 2009

Я думаю, это зависит от используемого вами веб-сервера. Я помню разные поля для mongrel, apache и nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...