不管是开始学习Java或者SpringMVC的初学者,还是已经开始进行实际开发的开发者,我们都或多或少的会在开发中碰到多文件(图片)上传的问题,那么在这个过程中,我们需要采用什么方法实现相关功能呢?接下来我将简要介绍本人在实际开发中实现 实现的多图片上传的方法。 开发背景:在某功能模块中,当我们进行新增部门的操作中,需要分别上传部门照片及一张Logo图片,也就是说我们需要通过两个文件选择框分别选择需要上传的图片,再和其他信息连同这两张图片传递给后台进行相关处理。
实现步骤:
引入相关Maven架包:
<!--数据上传的包--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
配置文件上传解析器(spring-mvc.xml中):
<!-- 配置多文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding"> <value>UTF-8</value> </property> <property name="maxUploadSize"> <!-- 上传文件大小限制为31M,31*1024*1024 --> <value>32505856</value> </property> <property name="maxInMemorySize"> <value>4096</value> </property> </bean>
前端实现(简):
分别定义两个文件上传选择框进行logo及部门照片的选择,定义不同的名称,以form表单的形式提交给后台,注意需要通过enctype="multipart/form-data"设置表单的MIME编码,通过action标签指明处理接口;
服务器端实现:
@RequestMapping(value = "/collect_info", method = RequestMethod.POST) public String upload(Model model, HttpServletRequest request) throws IOException { // 创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver( request.getSession().getServletContext()); if (multipartResolver.isMultipart(request)) { MultipartFile file = null; MultipartFile file2 = null; MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; file = multiRequest.getFileMap().get("file"); String newFile = "";List<String> listImagePath=
new
ArrayList<String>();
if (file != null) { // 取得当前上传文件的文件名称 String myFileName = file.getOriginalFilename(); // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 if (myFileName.trim() != "") { // 重命名上传后的文件名 String fileName = String.valueOf(System.currentTimeMillis()); String path = "F:\\logo"; newFile = fileName + "." + myFileName.substring(myFileName.indexOf(".") + 1); File localFile = new File(path, newFile); file.transferTo(localFile);
listImagePath.add(path);
} } file2 = multiRequest.getFileMap().get("file2"); if (file2 != null) { // 取得当前上传文件的文件名称 String myFileName = file2.getOriginalFilename(); // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 if (myFileName.trim() != "") { // 重命名上传后的文件名 String fileName = String.valueOf(System.currentTimeMillis()); String path = "F:\\pic"; newFile = fileName + "." + myFileName.substring(myFileName.indexOf(".") + 1); File localFile = new File(path, newFile); file2.transferTo(localFile);listImagePath.add(path);
} } }request.setAttribute(
"imagesPathList"
, listImagePath);
return "page/test"; }
在服务器端实现代码中,分别定义两个MultipartFile接收前端提交过来的两张图片来做相应的逻辑处理,上面的代码中为了方便查看,我将转储地址设置的计算机本地的磁盘,实际开发中应将其存放在服务器上。相应的实现逻辑较简单,在此就不详细介绍。后续将继续推出通过同一选择框选择多个文件进行上传操作的博文,敬请期待。