在Play Framework中将文件传递给POST请求

时间:2012-04-12 12:10:39

标签: java rest playframework

我们正在使用Play Framework 2.0。提供REST请求。我们希望能够将文件传递给POST请求,并能够在我们的控制器中处理它。

我最终得到了以下内容:

GET /customer/:id/photos    controllers.PhotosController.addPhoto(id: Integer, page: String)

我试图在Controller代码中找到该文件的内容,但没有运气。

我是按照以下方式发送POST请求的:

curl.exe -X GET localhost:9000/customer/23/photos?page=Sun.jpg

任何想法如何处理这种情况?

3 个答案:

答案 0 :(得分:0)

//add this line in you controller

static play.data.Form<Model> modelForm = form(Model.class);

public static Result addPostSave(){
    try{
      MultipartFormData body = request().body().asMultipartFormData();
      FilePart picture = body.getFile("picture");
      File pic = picture.getFile();
if(filledForm.hasErrors()){
              return ok(addPost.render(postForm));
          }else{              
              Post post = new Post();
              post.picture = pic;
              post.save();
              return ok(index.render("The image is created"));
          }  
    }catch(IOException e){
       return ok(e.to_string)
    }    
}

答案 1 :(得分:0)

我相信你的控制器看起来像:

public static void addPhoto(Integer id, File page){}

路线:

POST /customer/:id/photos controllers.PhotosController.addPhoto(id: Integer, page: File)

您的测试请求应该类似于:

curl.exe -F page=@Sun.jpg localhost:9000/customer/23/photos

(在游戏1.2.3中测试)

答案 2 :(得分:0)

在Play 2.0中你可以这样做:

控制器(仅举例):

public static Result addPhoto(Integer id){
    MultipartFormData body = request().body().asMultipartFormData();
    FilePart file = body.getFile("page");
    System.out.println(file.getFilename());
    System.out.println(file.getFile().getAbsoluteFile());
    return ok();
}

<强>路由

POST    /addphoto/:id   controllers.PhotosController.addPhoto(id: java.lang.Integer)

curl命令

curl --header "enctype -> multipart/form-data" -F page=@/path/to/file localhost:9000/addphoto/23