1、基本的文件上传处理
将form的类型设置成multipart/form-data,请求的方式必须是POST类型,实例如下:
请求发到controller,controller中处理:
public Result upload() {MultipartFormData<TemporaryFile> body = request().body().asMultipartFormData();MultipartFormData.FilePart<TemporaryFile> picture = body.getFile("picture");// 直接转成File,然后进行处理File file = (File)picture.getFile();// 也可以通过下边的方式进行操作if (picture != null) {String fileName = picture.getFilename();long fileSize = picture.getFileSize();String contentType = picture.getContentType();TemporaryFile file = picture.getFlie();file.copy(new File(“路径”));return ok("File uploaded");}}
2、AJAX异步上传表单文件
在这种情况下,请求主体不会被编码为multipart/form-data数据,而是只包含纯文件内容。此时可以使用另一种方式进行处理:
3、流式文件上传解析器
Multipart/form-data指定的上载从请求中获取上载的数据,并将其放入临时文件对象中,可以通过使用multipartformDataBodyParser类将multipart.fileinfo信息流式传输到另一个类:
此内容在multipartformDataBodyParser文件中
4、清理临时文件
在conf/application.conf中进行配置,应用启动5分钟后开始检测并删除应用中的上传时间超过了30分钟的临时文件,此任务每30秒走一次:
play.temporaryFile {reaper {enabled = trueinitialDelay = "5 minutes"interval = "30 seconds"olderThan = "30 minutes"}}
这里有一个疑问,如何限制上传文件的大小呢?
可以在提交时进行校验,也可以通过限制请求体解析器需要用到的缓冲区大小进行控制