2012-07-04 13 views
24

Kiedy przesyłanie dużych plików (powyżej 1 MB) w zabaw Framework 2.0 uzyskaćMax rozmiar przesyłanie plików w grze ram 2,0

„413 Zbyt duże żądanie” błąd.

Czy mógłbyś sprawić, że ktoś zasugerował, jak się tego pozbyć?

Dzięki,

UPDATE Mam rozwiązać ten problem przez dodanie tego do application.conf

#set maksymalny rozmiar pliku

parsers.MultipartFormData.maxLength = 10240K

+5

'parsers.MultipartFormData.maxLength = x' w' application.conf' nie wydają się działać w Play 2.2.x – dbau

+1

nie wydają się działać z wartościami większymi niż 2GB. Użyłem 4096M i załadowałem plik 3,96 Gb i nadal nie udało się. nie 413 błąd, ale kiedy próbowałem zadzwonić 'RequestBody body = request(). body(); MultipartFormData formBody = body.asMultipartFormData(); ' FormBody ma wartość NULL. To prowadzi mnie do przekonania, że ​​istnieje pewien twardy limit wielkości wysyłania.Próbuję przesłać pliki o wielkości 4-6 GB. –

Odpowiedz

18

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

lub wersja Java: http://www.playframework.com/documentation/2.0.x/JavaBodyParsers

ekstrakt:

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

I można skonfigurować w ten swój application.conf użyciu parsers.text.maxLength.

+0

Hej Dzięki za twoją pomoc. Jestem facetem z Java. Moim problemem było przekonwertowanie powyższych linii na Javę. W każdym razie dzięki. –

+1

"' parsers.text.maxLength' jest przestarzałe, użyj 'play.http.parser.maxMemoryBuffer zamiast'" (Play 2.4) – Jonik

15

parse.multipartFormData i parse.temporaryFile nie biorą maxLength jako argumentu pozwalając zmniejszyć lub zwiększyć domyślną jak parse.text(maxLength) robi.

Ale można użyć parse.maxLength(maxLength, wrappedBodyParser) zamiast:

// 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

Zamiast BadRequest byłoby bardziej odpowiednie użycie EntityTooLarge. – Josef

9

zabaw dla wersji 2.4.x:

Dla parserów, które buforują zawartość na dysku, takich jak surowy parser lub wieloczęściowy/formularz danych, maksymalna długość treści określona jest za pomocą play.http.parser.maxDiskBuffer Właściwość domyślnie wynosi 10 MB. Parser wieloczęściowy/danych formularza również wymusza właściwość max length tekstu dla agregatu pól danych.

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