Как уберечь Rails от обработки больших XML-постов - PullRequest
3 голосов
/ 02 октября 2010

В нашем приложении rails у нас есть много действий, которые выполняют обычные действия webapp.Но у нас есть одно действие, которое принимает большой XML-файл.Я бы хотел, чтобы рельсы не разбирали XML в params.Вместо этого я хотел бы иметь возможность получить параметры URL (/ documents / {id} / action), а затем записать файл XML в определенный каталог.Как мне предотвратить, чтобы Rails его обрабатывал?

Как бы я определил действие, чтобы справиться с этим?

def handle_xml
   # what to put here
end

Загрузка выполняется с использованием Content-Type: application / xml. Это одинфайл, а не часть составной формы.Пример оператора curl:

curl-H 'Accept: application/xml' -H 'Content-Type: application/xml' -X POST -d '<?xml version="1.0" encoding="UTF-8"?><test></test>' http://0.0.0.0:3000/controller/handle_xml

Ответы [ 4 ]

5 голосов
/ 11 мая 2011

Если вы не хотите, чтобы рельсы автоматически разбирали данные XML в хэш параметров, вам придется заменить промежуточное программное обеспечение ParamsParser своей собственной пользовательской версией.

Когда файл публикуется на рельсах,промежуточное ПО ParamsParser изменяет параметры запроса и превращает его в хэш, если формат данных xml.Подробности вы можете найти в файле params_parser.rb в rails.

Вот сообщение RoR , похожее на вопрос, который вы задали

К сожалению, как новый пользователь, я не могу больше публиковать ссылки, но вам следует поискать в Google с помощью «Обработка параметров POST с помощью пользовательского промежуточного программного обеспечения Rack», чтобы получить дополнительную информацию о написании специального промежуточного программного обеспечения стойки.

1 голос
/ 07 ноября 2012

Я тоже недавно сталкивался с этой проблемой. Однако мое находится во внутреннем приложении, где у меня есть полный контроль над приложением Rails и подключающимися к нему клиентами.

В моем приложении клиент помещает большой набор данных XML в приложение Rails. Я хотел обработать XML-документ с отложенным заданием (resque). Мой обходной путь - заставить клиента использовать альтернативный тип контента. Я использовал application / octet-stream . Это не позволяет Rails анализировать данные POST. Данные доступны в request.raw_post.

0 голосов
/ 02 октября 2010

Вы пытались отправить файл xml с одной переменной в запросе http uri?Так что-то типа

@xml_file = xml..xml...xml...

parameters => {
  query => {
    xml_file => @xml_file
  }
}
Httparty.post("url", parameters)

Тогда в вашем методе:

def handle_xml
  @xml_file = params[:xml_file]
  @xml_file.save (or whatever you want here..)
end
0 голосов
/ 02 октября 2010

Действие должно получить его в виде файла (посредством многоэлементной загрузки формы), а затем сохранить его как временный файл для вас.

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