2016-07-09 10 views
4

Ich habe ein Projekt, wo ich einen einfachen Client in angularjs geschrieben habe und der Server ist in Scala, in meinem Client habe ich eine einfache Upload-Taste, wo Sie klicken Sie auf und wählen Sie eine lokale Datei (cSV), und wenn ich eine bestimmte csv hochladen, die ein wenig zu groß ist, wie 6000 Zeilen ichWie zu beheben 413 HTTP Request Entity zu groß

413 Angeforderte Entität zu groß

mein js Code für den Upload ist:

$scope.upload = function(files) { 
    if (!files || !files.length) { 
    } else { 
     for (var i = 0; i < files.length; i++) { 
     var file = files[i]; 
     Upload.upload({ 
      url: '/uploadFile', 
      file: file 
     }). 
     }).success(function (data, status, headers, config) { 
     }).error(function (data, status, headers, config) { 
      $scope.showServerError(status, data); 
     }) 
     } 
    } 
    }; 

in dem Server ist:

def uploadFile = Action(parse.multipartFormData) { implicit request => 

    request.body.file("file").fold { 
     BadRequest("Missing file") 
    } { uploadedFile => { 

     val localFile = new File("/tmp/" + uploadedFile.ref.file.getName) 

     Files.copy(uploadedFile.ref.file.toPath, localFile.toPath, StandardCopyOption.REPLACE_EXISTING) 
     localFile.deleteOnExit() 
     val j = Json.parse(${Crypto.encryptAES(localFile.getAbsolutePath)}}) 
     Ok(j) 
    }} 
    } 

was braucht Veränderung sein, um größere Dateien zu unterstützen?

Antwort

2

Sie können die maxLength Körper Parser die maximale Größe des Körpers in Bytes angeben:

// Allow up to 15MB files... 
private val uploadParser = parse.maxLength(15*1024*1024, parse.multipartFormData) 

def uploadFile = Action(uploadParser) { implicit request => 
    ... 
} 

Die Standard-10MB für mehrteiliger Formulardaten sind, die Sie auch durch Änderung der play.http.parser.maxDiskBuffer Einstellung außer Kraft setzen können. Siehe docs.

+0

Ich habe versucht, play.http.parser.maxMemoryBuffer = 20M zu setzen, weil ich Uploads bis zu 20 MB unterstützen will und es nicht funktioniert ... weißt du warum? schreibe ich es ok? –

+0

@jackmiao hast du versucht, "maxDiskBuffer" ** zu ändern? – Mikesname

+0

ja ... das ist, was ich 'play.http.parser.maxMemoryBuffer = 20M' in application.conf gemacht habe –