1、playframework中上传提交(网页版)
1.playframework通常通过在web应用中标准的文件上传方式是在表单中使用一个特殊的"multipart/form-data编码,它允许标准表单数据和文件附件混合使用,用法如下:
建User的Model
提交的form表单import play.db.jpa.Blob; @Entity public class User extends Model { public String name; public
Blob photo
; }
#{form @
addUser
(), enctype:'multipart/form-data'} <input type="file" name="user.photo"> <input type="submit" name="submit" value="Upload"> #{/form}
添加用户,同时也保存了网页提交的数据
在网页上显示提交的东西,如image,需要在controller中添加一个方法:public static void
addUser
(User user) { user.save(); index(); }
public static voiduserPhoto(long id) {
final User user = User.findById(id);
notFoundIfNull(user);
response.setContentTypeIfNotSet(user.photo.type());
renderBinary(user.photo.get());
}
<img style='width: 100%' src= "@{userPhoto(user.id)}"/>
这样就会上传图片并显示出来~
2、playframework中上传提交(接口版)
通过java.io.File来保存用户提交到服务器的文件,然后返回客户端上传的文件名
(1).通过MimetypesFileTypeMap来判断文件类型
public static String getFileType(java.io.File file){
MimetypesFileTypeMap typeMap = new MimetypesFileTypeMap();
typeMap.addMimeTypes("audio/mp3 mp3");
typeMap.addMimeTypes("audio/ogg ogg");
typeMap.addMimeTypes("video/mp4 mp4");
String fileType = typeMap.getContentType(file);
return fileType;
}
提示:使用MimetypesFileTypeMap时,需要指定mimetypes,不然提交音频或视频时返回的都是application/octet-stream,加上上方红色部分即可。返回的结果类型如:images/png
(2).提交文件,方法如:
public static void uploadFile(java.io.File uploadFile)
throws IOException{
if(uploadFile != null){
java.io.File saveFile = new File(Blob.getStore(), 'filePath.type');
if(!saveFile.exists()){
public static MapdataMap= new HashMap();
saveFile.createNewFile();
IO.write(new FileInputStream(uploadFile), saveFile);
flash.put("notice", "已经成功上传"+file.name);
dataMap.put("status_code", status_code);
dataMap.put("msg", msg);
dataMap.put("file_name", file.name);
renderJSON(dataMap);
}
}
}
render();
}
提示:Blob.getStore()时给出data/attachments的动态路径;filePath.type为文件想保存的路径加上文件类型;
dataMap为返回客户端的json数据;IO.write(new FileInputStream(uploadFile), saveFile)将文件写入。
效果如下:
{
-
status_code: 0,
-
file_path: "/data/attachments/21_sub.jpg",
-
msg: ""
}
(3).然后按返回的路径去服务器取,便可以得到自己上传的东西,如:
提示:我将上传的东西放在了data/attachments文件夹下,但有时候访问不到,这时候,需要修改conf/routes文件,将data加为静态路径,写法为:
GET /data/ staticDir:data
(4).客户端在向服务器请求的时候可能会出现接口字段不匹配的问题,如:需要user_id字段,却提供了id的字段,这样会默认将user_id赋值为0,这样就不是你想要的结果。