[英]Multipart is null when uploading formdata to remote Tomcat server
[英]Tomcat 7 Multipart formdata
我有一个用Scala编写的Play 2.0 Web应用程序。 我已经使用play war插件生成了一个WAR文件,并部署在了tomcat 7.0.27上。
当我使用enctype =“ multipart / form-data”提交表单时,请求失败了。 错误似乎与播放框架未找到数据的“边界”有关。
我已经尝试过将allowCasualMultipartParsing =“ true”放置,但这无济于事
相同的代码在播放服务器上工作正常。 我在Tomcat上缺少什么? 是否有启用/抑制多声部的特定配置?
相关的表单代码为:
<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>
控制器代码如下:
val hash_string = "xxxxxxxxxxxx"
var logoFile: String = null
request.body.asMultipartFormData.map { x => x.file("logo").map { logo => logoFile = uploadFile(hash_string, logo) } }
即使我没有上传文件,我仍然会收到BadRequest-转储,如下所示:
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]
问题是,如果您像我在代码中那样使用“ request.body.asMultipartFormData”,它可以在play上运行,但不能在tomcat上使用。 但是,如果使用“ parse.multipartFormData” BodyParser,则可以使用。 不知道为什么,但是现在这样做了,我的方法如下:
def create = IsMultipartAuthenticated(parse.multipartFormData) { user
=> implicit request =>
...
request.body.file("logo").map { logo => ... }
...
Ok
}
我为安全特征添加了一种方法:
def IsMultipartAuthenticated(p: BodyParser[MultipartFormData[TemporaryFile]])(f: => String =>
Request[MultipartFormData[TemporaryFile]] => Result) =
Security.Authenticated(username, onUnauthorized) { user =>
Action(p)(request => f(user)(request))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.