2012-07-04 19 views
24

al cargar archivos de gran tamaño (más de 1 MB) en el marco juego 2.0 consigoTamaño máximo de carga de archivos de Juego marco 2.0

error "413 Entidad de solicitud demasiado grande".

¿Podría alguien sugerir cómo deshacerse de esto?

Gracias,

ACTUALIZACIÓN que han resuelto este problema agregando esto a application.conf

#Establecer Tamaño máximo del archivo

parsers.MultipartFormData.maxLength = 10240K

+5

'parsers.MultipartFormData.maxLength = x' en' no parece application.conf' a trabajar en Play 2.2.x – dbau

+1

Esto no parece trabajar con valores de más de 2 GB. Usé 4096M y cargué un archivo de 3.96 Gb y todavía falló. no 413 error pero cuando traté de llamar a 'RequestBody body = request(). body(); MultipartFormData formBody = body.asMultipartFormData(); ' formBody era nulo. Esto me lleva a pensar que hay un límite estricto para el tamaño de carga.Estoy tratando de subir archivos de tamaño 4-6Gb. –

Respuesta

18

Ver http://www.playframework.com/documentation/2.0.x/ScalaBodyParsers

o versión de Java: http://www.playframework.com/documentation/2.0.x/JavaBodyParsers

extracto:

// Accept only 10KB of data. 
def save = Action(parse.text(maxLength = 1024 * 10)) { request => 
    Ok("Got: " + text) 
} 

Y se puede configurar esto en su application.conf usando parsers.text.maxLength.

+0

Hola, gracias por tu ayuda. Soy un chico de Java. Mi problema era convertir las líneas anteriores en Java. Gracias de todos modos. –

+1

"' parsers.text.maxLength' está en desuso, use 'play.http.parser.maxMemoryBuffer instead'" (Play 2.4) – Jonik

15

parse.multipartFormData y parse.temporaryFile no tome maxLength como argumento, lo que le permite aumentar o disminuir el valor predeterminado como parse.text(maxLength) hace.

Pero se puede utilizar en lugar parse.maxLength(maxLength, wrappedBodyParser):

// accepts 10 MB file upload 
def save = Action(parse.maxLength(10 * 1024 * 1024, parse.multipartFormData)) { request => 
    request.body match { 
     case Left(MaxSizeExceeded(length)) => BadRequest("Your file is too large, we accept just " + length + " bytes!") 
     case Right(multipartForm) => { 
      /* Handle the POSTed form with files */ 
      ... 
     } 
    } 
} 
+2

En lugar de BadRequest, sería más adecuado usar EntityTooLarge. – Josef

9

para la versión de juego 2.4.x:

Para los analizadores que almacenan el contenido en el disco, como el analizador sin procesar o multipart/form-data, la longitud máxima del contenido se especifica utilizando el play.http.parser.maxDiskBuffer propiedad, por defecto es 10MB. El analizador multipart/form-data también impone la propiedad de longitud máxima de texto para el agregado de los campos de datos.

https://www.playframework.com/documentation/2.4.x/ScalaBodyParsers

Cuestiones relacionadas