Как читать данные формы с помощью ruby - PullRequest
1 голос
/ 26 февраля 2010

В моем контроллере результат request.body.read:

=============
--AJAX-----------------------1267183973160
Content-Disposition: form-data; name="1261400603_page_white_word.png"; filename="1261400603_page_white_word.png"
Content-Type: application/octet-stream

thefile
--AJAX-----------------------1267183973160
Content-Disposition: form-data; name="1261400536_page_white_excel.png"; filename="1261400536_page_white_excel.png"
Content-Type: application/octet-stream

thefile
--AJAX-----------------------1267183973160--
=============

Он содержит n данных формы (в моем примере - 2), моя цель - перебрать n данных формы и получить данные name, filename и загруженный файл, в моем примере я заменил двоичный файл данные thefile.

вот содержимое хэша params

{"action"=>"create", "controller"=>"photos", "1265144945_395.jpg"=>#<File:/var/folders/BT/BTpdsWBkF6myaI-sl3+1NU+++TI/-Tmp-/RackMultipart20100226-273-1un364r-0>}

Приветствия

1 Ответ

2 голосов
/ 26 февраля 2010

Рассматривали ли вы использование скрепки или attachment_fu ? Они проверены в бою и будут лучше, чем при использовании request.body. В любом случае вы можете проанализировать request.body следующим образом, но это не лучшее решение.

inputs =  request.body.read.split(/--ajax-+\d+-*/mi)

inputs.each do |input| 
  input.scan(/(.*)[\n\r]{2,4}(.*)/m) do |header, file| 
    header.scan(/name=["'](.*)["'];\s+filename=["'](.*)["']/) do |name, filename|
      puts name
      puts filename
    end
    puts file
  end
end

Редактировать: так что разбор параметров, вероятно, работа Rack :: Utils :: Multipart.parse_mulitpart . Вероятно, следует повторно использовать регулярные выражения из источника этого, чтобы проанализировать это более надежно. Кроме того, похоже, что rack создает для вас файл tmp. Можете ли вы проверить содержимое этого файла?

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