YMP Online Manual /文件上传(Upload)

文件上传(Upload)

WebMVC模块针对文件的上传处理以及对上传的文件操作都非常的简单,通过注解就轻松搞定:

  • @FileUpload:声明控制器方法需要处理上传的文件流;

    无参数,需要注意的是文件上传处理的表单enctype属性:

    ......
  • IUploadFileWrapper:上传文件包装器接口,提供对已上传文件操作的一系列方法;

示例代码:

@Controller @RequestMapping("/demo) public class UploadController { // 处理单文件上传 @RequestMapping(value = "/upload", method = Type.HttpMethod.POST) @FileUpload public IView doUpload(@RequestParam IUploadFileWrapper file) throws Exception { // 获取文件名称 file.getName(); // 获取文件大小 file.getSize(); // 获取完整的文件名及路径 file.getPath(); // 获取文件Content-Type file.getContentType(); // 转移文件 file.transferTo(new File("/temp", file.getName())); // 保存文件 file.writeTo(new File("/temp", file.getName()); // 删除文件 file.delete(); // 获取文件输入流对象 file.getInputStream(); // 获取文件输出流对象 file.getOutputStream(); return View.nullView(); } // 处理多文件上传 @RequestMapping(value = "/uploads", method = Type.HttpMethod.POST) @FileUpload public IView doUpload(@RequestParam IUploadFileWrapper[] files) throws Exception { // ...... return View.nullView(); } }

文件上传相关配置参数:

#------------------------------------- # 文件上传配置参数 #------------------------------------- # 文件上传临时目录,为空则默认使用:System.getProperty("java.io.tmpdir") ymp.configs.webmvc.upload_temp_dir= # 上传文件大小最大值(字节),默认值:-1(注:10485760 = 10M) ymp.configs.webmvc.upload_file_size_max= # 上传文件总量大小最大值(字节), 默认值:-1(注:10485760 = 10M) ymp.configs.webmvc.upload_total_size_max= # 内存缓冲区的大小,默认值: 10240字节(=10K),即如果文件大于10K,将使用临时文件缓存上传文件 ymp.configs.webmvc.upload_size_threshold= # 文件上传状态监听器,可选参数,默认值为空 ymp.configs.webmvc.upload_file_listener_class=

文件上传状态监听器(upload_file_listener_class)配置:

WebMVC模块的文件上传是基于Apache Commons FileUpload组件实现的,所以通过其自身提供的ProgressListener接口即可实现对文件上传状态的监听;

示例代码:实现上传文件的进度计算;

public class UploadProgressListener implements ProgressListener { public void update(long pBytesRead, long pContentLength, int pItems) { if (pContentLength == 0) { return; } // 计算上传进度百分比 double percent = (double) pBytesRead / (double) pContentLength; // 将百分比存储在用户会话中 WebContext.getContext().getSession().put("upload_progress", percent); } }
  • 将该接口实现类配置到 ymp.configs.webmvc.upload_file_listener_class 参数中;

  • 通过Ajax定时轮循的方式获取会话中的进度值,并展示在页面中;