Tomcat 7 multipart formdata
-
12-12-2019 - |
Question
J'ai une application Web de Play 2.0 écrite à Scala.J'ai généré un fichier de guerre en utilisant le plug-in Jouer War et déployé sur Tomcat 7.0.27.
Lorsque je soumets un formulaire avec ENCTYPE="Multipart / Form-Data", la demande tombe sur.L'erreur semble être avec le cadre de lecture ne trouverait pas une "limite" aux données.
J'ai déjà essayé de mettre allowcasealmultipartparsing="vrai" mais ça n'aide pas
Le même code fonctionne bien sur le serveur de lecture.Qu'est-ce que je manque sur tomcat?Existe-t-il une configuration spécifique qui permet / supprime la multipart?
Le code de formulaire correspondant est:
<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>
Le code du contrôleur ressemble à:
val hash_string = "xxxxxxxxxxxx"
var logoFile: String = null
request.body.asMultipartFormData.map { x => x.file("logo").map { logo => logoFile = uploadFile(hash_string, logo) } }
Même si je ne télécharge pas de fichier, je reçois toujours un BADEQUEST - Dump comme suit:
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]
La solution
Le problème était que si vous utilisez "demande.body.asmultiparformdata" Comme je l'utilisais dans mon code, cela fonctionne avec jeu mais ne pas sur Tomcat.Cependant, si vous utilisez le «parse.multiparformdata» Bodyparser, cela fonctionne.Je ne sais pas pourquoi, mais Cela fait Alors maintenant, ma méthode ressemble à:
def create = IsMultipartAuthenticated(parse.multipartFormData) { user
=> implicit request =>
...
request.body.file("logo").map { logo => ... }
...
Ok
}
J'ai ajouté une méthode pour le trait sécurisé:
def IsMultipartAuthenticated(p: BodyParser[MultipartFormData[TemporaryFile]])(f: => String =>
Request[MultipartFormData[TemporaryFile]] => Result) =
Security.Authenticated(username, onUnauthorized) { user =>
Action(p)(request => f(user)(request))
}