我们正在使用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
任何想法如何处理这种情况?
答案 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