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] 

¿Fue útil?

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)) 
  } 

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top