2013-03-20 51 views
2

請幫我查找Play Framework 2(Java)中的多文件上傳示例。在Play Framework 2中製作多文件上傳的示例

我試試這個代碼:

public static Result saveImages() { 
    File dir = new File(Play.application().path() + File.separator + "public" + File.separator + "uploads"); 
    if (!dir.exists()) { 
     dir.mkdirs(); 
    } 
    FileOutputStream moveTo = null; 
    String filename = request().headers().get("x-file-name").toString(); 
    Logger.info("Name of the file " + filename); 
    return ok(); 
} 

筆者認爲:

<form action="save_image" method="POST" enctype="multipart/form-data"> 
     <input type="file" name="image" /> 
     <input type="submit" value="save"> 
    </form> 

但是這個代碼給我一個錯誤NullPointerException在行:

String filename = request().headers().get("x-file-name").toString(); 

堆棧跟蹤:

[error] application - 

! @6dkiaiban - Internal server error, for (POST) [/save_image] -> 

play.api.Application$$anon$1: Execution exception[[NullPointerException: null]] 
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.0] 
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.0] 
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10.jar:2.1.0] 
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10.jar:2.1.0] 
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0] 
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0] 
java.lang.NullPointerException: null 
at controllers.Realty.saveImages(Realty.java:76) ~[na:na] 
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$9$$anonfun$apply$9.apply(routes_routing.scala:253) ~[na:na] 
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$9$$anonfun$apply$9.apply(routes_routing.scala:253) ~[na:na] 
at play.core.Router$HandlerInvoker$$anon$6$$anon$2.invocation(Router.scala:141) ~[play_2.10.jar:2.1.0] 
at play.core.Router$Routes$$anon$1.invocation(Router.scala:322) ~[play_2.10.jar:2.1.0] 
at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:31) ~[play_2.10.jar:2.1.0] 
+0

複製/粘貼堆棧跟蹤作爲[編輯問題](http://stackoverflow.com/posts/15519830/edit)。這也有助於發佈[SSCCE](http://sscce.org/),以便我們匹配行號。 – 2013-03-20 09:41:44

+0

我還在此主題中添加了堆棧跟蹤和我的查看錶單 – guyver 2013-03-20 09:56:35

+0

是否存在您不明白的「SSCCE」的某些部分? – 2013-03-20 13:18:33

回答

0

萬一有人正在尋找一種方法來提取POST請求一個文件,下面的工作對我來說:

(輸入具有屬性名稱設置爲「jsonFile」)

Http.MultipartFormData body = request().body().asMultipartFormData(); 
Http.MultipartFormData.FilePart resourceFile = body.getFile("jsonFile"); 

if(resourceFile != null) 
{ 
    File uploadedFile = resourceFile.getFile(); 
} 

編輯:編輯參考,因爲我剛剛注意到這個問題是相當老

+0

Thanx這工作對我來說很好:) – guyver 2013-07-28 14:29:08