项目中常常须要进行文件上传处理,因此一个好用的文件上传工具必不可少,基于Maven的SpringMVC项目中的文件上传封装工具:java
<!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <!-- 图片压缩 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
package com.tool.image; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import com.tool.IsNull; /** * <p>SpringMVC文件上传工具 * <p>建立人:geYang * <p>建立时间:2017.8.1 */ public class Uplode { /** *<p>方法说明: TODO 文件上传 *<p>参数说明: HttpServletRequest request *<p>参数说明: String path 图片上传路径(例:"/fileLibrary/upload/productPicture/") *<p>参数说明: 注意: 1:上传文件的 input 标签名默认为 "files"; *<p> 2:每次上传最多不能超过10个文件; *<p> 3:单个文件最大不能超过300KB;S *<p> 例: input type="file" name="files" data-show-caption="true" multiple="multiple" *<p>返回说明: List<String> listImage 上传后的文件名集合 *<p>建立时间: 2017年10月24日 下午3:44:21 *<p>创 建 人: geYang **/ public static List<String> uploadFileList(HttpServletRequest request,String path){ return uploadFileList(request, path, "files"); } public static List<String> uploadFileList( HttpServletRequest request, String path, String name){ List<String> listImage = new ArrayList<String>(); //返回的图片名列表 //建立一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); if (multipartResolver.isMultipart(request)) { // 转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; List<MultipartFile> list = multiRequest.getFiles(name); // 取得request中的全部文件名 if(list.size() > 10){ System.out.println("单次上传不能超过10个文件"); return null; } Iterator<MultipartFile> it = list.iterator(); while(it.hasNext()){ MultipartFile file = it.next(); System.out.println("文件大小=="+file.getSize()); if(file.getSize()>300*1024){ System.out.println("该文件大小超过300KB,不执行上传"); continue; } String imageName = null; try { imageName = uploadFile(file,request,path); //执行上传 } catch (IllegalStateException | IOException e) { e.printStackTrace(); System.out.println("文件上传异常"); } if(!IsNull.isNull(imageName)) listImage.add(imageName); } } return listImage; } /** * <p>方法说明:文件删除方法 * <p>参数说明:HttpServletRequest * <p>参数说明:String fileName 将要删除的文件名 * <p>返回说明:成功 turn| 错误 false * <p>建立人: geYang * <p>建立时间:2017.8.2 * */ public static boolean delete(HttpServletRequest req, String fileName){ if(IsNull.isNull(fileName)){ return false; }else{ String realPath = req.getSession().getServletContext().getRealPath(fileName); File f = new File(realPath); // 输入要删除的文件位置 if(f.exists() && !f.isDirectory()){ f.delete(); return true; } return false; } } /** * <p>方法说明:文件上传路径处理(图片不压缩) * <p>参数说明:MultipartFile file 上传的文件 * <p>参数说明:String saveUrl 文件存放路径 * <p>参数说明:HttpServletRequest * <p>返回说明:String imgName 返回上传后文件名(包括路径) * @throws IOException * @throws IllegalStateException * */ private static String uploadFile(MultipartFile file,HttpServletRequest request,String saveUrl) throws IllegalStateException, IOException{ String originalName = file.getOriginalFilename(); //获取文件原先名称 String suffix= originalName.substring(originalName.lastIndexOf(".")); //取到上传图片的后缀名 String uuid = UUID.randomUUID()+suffix; //随机生成图片名字 //获取图片存入地址 String realPath = request.getSession().getServletContext().getRealPath(saveUrl); File files = new File(realPath); //判断该路径文件夹是否存在 if(!files.exists()||!files.isDirectory()){ files.mkdirs(); //建立文件夹 } file.transferTo(new File(realPath+"/"+uuid)); //将图片存入以上地址 return saveUrl+uuid; } }