1

我只是游戏框架中的新手,我正在尝试使用 playframework 2.1.1 对上传文件进行编码,但我收到了这个异常 [NullPointerException]: null
我的控制器中有以下代码并使用此链接

package controllers;

//import com.ning.http.client.FilePart;
import play.mvc.Http.MultipartFormData;
import play.mvc.Http.MultipartFormData.FilePart;
import play.*;
import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import java.io.File;
import models.*;
import views.html.*;

public class Application extends Controller {
  
    public static Result index() {
        return ok(index.render("My App"));
    }
public static Result upload(){
    MultipartFormData body=request().body().asMultipartFormData();
    MultipartFormData.FilePart picture=body.getFile("picture");//Error is here 
 
    if(picture!=null){
        //String fileName=picture.getFileName(); and if I uncomment this line it also show an error for 'value not find 'getFileName' ' is there any import is needed?
        String contentType=picture.getContentType();
        File file=picture.getFile();
        return ok("File Uploaded");
    }
    else 
    {
        flash("error", "Missing File");
        return redirect(routes.Application.index());
    }
//File file = request().body().asRaw().asFile();
//return ok("File uploaded");

}  

}

并在 View 中的以下代码是 app/views/upload.scala.html

@helper.form(action = routes.Application.upload, 'enctype -> "multipart/form-data") {
    
    <input type="file" name="picture">
    
    <p>
        <input type="submit">
    </p>
    
}

请提出一些建议,我错在哪里。

提前致谢

4

1 回答 1

2

您没有发布routes文件,但由于错误,我猜您将请求映射到 aGET而不是POST.

原因是你NullPointerException在调用方法时会得到一个body. body在对象的前一行中初始化,request将内容检索为multipartFormData.

您的表单片段正确地将表单声明为multipart/form-data并按预期映射到控制器的方法。这意味着您不应该获取内容的唯一原因是请求的主体为空,在这种情况下,它只会出现在GET请求中。

当然,可能还有一个更奇特的原因,但我敢打赌就是这样。

于 2013-07-04T09:21:19.570 回答