Play里文件的上传比较简单,前面介绍过FormData的使用,那么这里我们可以通过FormData把文件传到后台。
后台在进行处理即可
代码很简单如下
public Result upload() {
// 通过请求体获取formData数据
Http.MultipartFormData body = request().body().asMultipartFormData();
// 获取其中的文件部分,其中picture是前面组装formData是数据的名字,也就是我们append的时候的第一个字段的名字,文件通过input.files[0].其中这个picture里包含文件的信息:文件的名字,文件类型,文件实体
Http.MultipartFormData.FilePart picture = body.getFile("picture");
if (picture != null) {
String fileName = picture.getFilename();
String contentType = picture.getContentType();
// 这里我们就将文件获取出来存到了play的临时文件内
// 临时文件路径C:\Users\userName\AppData\Local\Temp\playtemp3900594263857768917
File file = picture.getFile();
return ok("File uploaded");
} else {
flash("error", "Missing file");
return badRequest();
}
}
当然接下来我们需要做的就是将临时文件移动到我们的目标存储路径即可。因为对于后台也是刚开始,文件的存储还不太清楚,模仿别人的做了个简单的如下:上传用户的头像图片并存储。
public Result editUser(Long id) {
Http.MultipartFormDatabody = request().body().asMultipartFormData();
FilePart filePart = body.getFile("file");
File file = filePart.getFile();
File baseDir = new File("/files", filePart.getFilename());
String downloadURL = "http://127.0.0.1:8080" + baseDir;
User user = User.find.byId(id);
user.setAvater(downloadURL);
Ebean.save(user);
try {
// 创建目录
if(!baseDir.exists()) {
baseDir.mkdirs();
}
// 移动文件
Files.move(file.toPath(), baseDir.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ok();
}
注意这里的文件存储路径我是直接把文件移动到当前硬盘的根目录下,然后创建了个files文件下存储的,也没有做ngix域名等处理,做了个比较傻瓜式的。
只需要在本硬盘的根目录下将http-server启动即可
网友评论