Tomcat 7 Многочастные формы данных

У меня есть веб-приложение Play 2.0, написанное на Scala. Я создал файл WAR с помощью плагина play war и развернул его на tomcat 7.0.27.

Когда я отправляю форму с enctype="multipart/form-data", запрос падает. Ошибка, похоже, связана с тем, что игровая среда не находит «границу» для данных.

Я уже пробовал поставить allowCasualMultipartParsing="true" но это не помогает

Тот же код отлично работает на игровом сервере. Что мне не хватает на Tomcat? Есть ли конкретная конфигурация, которая включает/отключает составные части?

Соответствующий код формы:

<form method="POST" action="/create" id="myform" class="form-horizontal" enctype="multipart/form-data"> 
<input type="file" name="logo" id="logo"  placeholder="Logo Image" class="input-xlarge" />
<input type="submit" value="Save Details" class="btn btn-info"/>
</form>

Код контроллера выглядит так:

val hash_string = "xxxxxxxxxxxx"
var logoFile: String = null

request.body.asMultipartFormData.map { x => x.file("logo").map { logo => logoFile = uploadFile(hash_string, logo) } }

даже если я не загружаю файл, я все равно получаю BadRequest - дамп следующим образом:

Map(HOST -> non-empty iterator, ACCEPT-ENCODING -> non-empty iterator, 
ACCEPT-LANGUAGE -> non-empty iterator, REFERER -> non-empty iterator, 
CONTENT-LENGTH -> non-empty iterator, ORIGIN -> non-empty iterator, 
ACCEPT-CHARSET -> non-empty iterator, CONNECTION -> non-empty 
iterator, CONTENT-TYPE -> empty iterator, CACHE-CONTROL -> non-empty 
iterator, ACCEPT -> non-empty iterator, COOKIE -> empty iterator, USER- 
AGENT -> non-empty iterator) Map(utmc -> Cookie(utmc, 
84437902,-1,/,None,false,false), utmz -> Cookie(utmz, 
84437902.1337318013.1.1.utmcsr,-1,/,None,false,false), PLAYSESSION -> 
Cookie(PLAY_SESSION,11cd5ffd7e2b56910a6a118e0de60be50c963697-email 
%3Axxxxxxxxxxx,-1,/,None,false,false), __utma -> Cookie(utma, 
84437902.1740292094.1337318013.1337510573.1337583859.6,-1,/,None,false,fals e), 
__utmb -> Cookie(_utmb, 
84437902.2.10.1337583859,-1,/,None,false,false))' [Missing boundary 
header] 

person aishwarya    schedule 21.05.2012    source источник
comment
пожалуйста, вставьте сценарий ошибки   -  person UVM    schedule 21.05.2012


Ответы (1)


Проблема заключалась в том, что если вы используете «request.body.asMultipartFormData», как я использовал в своем коде, он работает с игрой, но не с tomcat. Однако, если вы используете BodyParser 'parse.multipartFormData', это работает. Не знаю почему, но теперь это так, мой метод выглядит так:

def create = IsMultipartAuthenticated(parse.multipartFormData) { user 
  => implicit request => 
  ... 
  request.body.file("logo").map { logo => ... } 
  ... 
  Ok 
} 

Я добавил метод к черте Secured:

def IsMultipartAuthenticated(p: BodyParser[MultipartFormData[TemporaryFile]])(f: => String => 
  Request[MultipartFormData[TemporaryFile]] => Result) = 
  Security.Authenticated(username, onUnauthorized) { user => 
    Action(p)(request => f(user)(request)) 
  } 
person aishwarya    schedule 21.05.2012