項目中常常須要進行文件上傳處理,因此一個好用的文件上傳工具必不可少,基於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; } }