Tomcat 7 multipart Formdata
-
12-12-2019 - |
Pregunta
Tengo una aplicación web de play 2.0 escrita en Scala.He generado un archivo de guerra usando el complemento de la Guerra de juego y se implementé en Tomcat 7.0.27.
Cuando envíe un formulario con Enctype="Multipart / Form-Data", la solicitud cae.El error parece estar con el marco de juego que no encuentra un 'límite' a los datos.
Ya he intentado poner allowcasualmultipartParsing="True", pero no ayuda
El mismo código funciona bien en el servidor de reproducción.¿Qué estoy perdiendo en Tomcat?¿Hay alguna configuración específica que permite / suprime multiparte?
El código de forma relevante es:
<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>
El código del controlador parece:
val hash_string = "xxxxxxxxxxxx"
var logoFile: String = null
request.body.asMultipartFormData.map { x => x.file("logo").map { logo => logoFile = uploadFile(hash_string, logo) } }
Incluso si no carga un archivo, todavía obtengo un BADREQUEST - VUELTO de la siguiente manera:
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]
Solución
El problema fue que si usa "Solicitud.body.asmultipartFormData" Como estaba usando en mi código, funciona Con juego pero no está en Tomcat.Sin embargo, si usas el 'parse.multipartformdata' bodyparser, que funciona.No sé por qué, pero lo hace Así que ahora, mi método parece:
def create = IsMultipartAuthenticated(parse.multipartFormData) { user
=> implicit request =>
...
request.body.file("logo").map { logo => ... }
...
Ok
}
He agregado un método para un rasgo asegurado:
def IsMultipartAuthenticated(p: BodyParser[MultipartFormData[TemporaryFile]])(f: => String =>
Request[MultipartFormData[TemporaryFile]] => Result) =
Security.Authenticated(username, onUnauthorized) { user =>
Action(p)(request => f(user)(request))
}