2012-05-21 87 views
2

我有一個用Scala編寫的Play 2.0 web應用程序。我使用play war插件生成了一個WAR文件,並部署在tomcat 7.0.27上。Tomcat 7多部分表單數據

當我使用enctype =「multipart/form-data」提交表單時,請求就會失敗。這個錯誤似乎與播放框架沒有找到數據的「邊界」有關。

我已經試圖把allowCasualMultipartParsing =「真」,但它並不能幫助

相同的代碼工作發揮服務器上的罰款。我在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) } } 

即使我不上傳文件,我仍然得到一個錯誤請求 - 自卸如下:

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] 
+0

請貼上錯誤的情況 – UVM

+0

@UnniVMana,添加。 – aishwarya

回答

0

問題是如果您使用 「request.body.asMultipartFormData」作爲我在我的代碼中使用,它運行 與戲劇,但不在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)) 
    } 
相關問題