spring mvc 上傳檔案幫助類(留備用)
阿新 • • 發佈:2018-11-02
package com.service.impl; import com.entity.UploadInfo; import com.service.UploadHelp; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.multipart.commons.CommonsMultipartFile; import com.common.Prompt; //import java.awt.image.BufferedImage; import java.io.File; import java.util.Arrays; import javax.servlet.ServletContext; //import javax.imageio.ImageIO; /** * 上傳檔案幫助類 * * @author mingqi_QIAN 建立日期2018-10-16 */ public class UploadHelpImpl implements UploadHelp { /** * 上傳檔案 * * @param file 檔案 * @param folder 資料夾 * @param suffixName 限制的上傳副檔名的集合 * @param maxSize 限制的最大上傳大小 * @return prompt */ @Override public Prompt uploadFile(CommonsMultipartFile file, String folder, String[] suffixName, long maxSize) { System.out.println(folder); Prompt prompt = new Prompt();// 訊息提示實體類物件 String fileName = file.getOriginalFilename();// 獲取檔名 String fileSuffix = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();// 獲取字尾 String newFileName = String.valueOf(System.currentTimeMillis()) + fileSuffix;// 重新命名檔名 String filePath = getPath(folder).getAbsolutePath();// 獲取路徑 System.out.println(filePath); String savePath = filePath + "\\" + newFileName;// 儲存檔案及檔案路徑 System.out.println(savePath); // 檢查資料夾是否在,不存在建立它 File folders = new File(filePath); if (!folders.exists() && !folders.isDirectory()) { folders.mkdir(); } // 限制檔案上傳型別 long fileSize = file.getSize(); if (!checkFileSuffix(fileSuffix, suffixName)) { prompt.setCode(2); prompt.setMessage("請選擇允許上傳的檔案!"); } else { // 限制檔案上傳大小 if (fileSize > maxSize) { prompt.setCode(3); prompt.setMessage("檔案超過制限大小!"); } else { try { // 寫入路徑 file.transferTo(new File(savePath)); prompt.setCode(1); prompt.setMessage("上傳成功!"); // 將檔案屬性以實體物件形式裝 UploadInfo uploadInfo = new UploadInfo(); uploadInfo.setFileName(newFileName); uploadInfo.setOldFileName(fileName); uploadInfo.setFileSize(String.valueOf(fileSize)); uploadInfo.setFilePath(getPath(folder).getRelativePath()+"/UpLoad/" + folder); uploadInfo.setFileSuffixName(fileSuffix); // 如果上傳的是圖片,獲取圖片的寬高,經測試 此處只支援png獲取,jpg會出錯 // String[] images = new String[] { ".jpg", ".gif", ".png",".jpeg",".bmp" }; // if (Arrays.asList(images).contains(fileSuffix)) { // BufferedImage image = ImageIO.read(file.getInputStream()); // if (image != null) { // uploadInfo.setFileWidth(image.getWidth()); // uploadInfo.setFileHeight(image.getHeight()); // } // } // 將檔案屬性實體加入訊息體中 prompt.setDatas(uploadInfo); } catch (Exception e) { prompt.setCode(0); prompt.setMessage("上傳失敗"); } } } return prompt; } /** * 檢查上傳檔案型別 * * @param filesuffix 檔案字尾名 * @param suffixName 允許上傳的字尾陣列 * @return */ private boolean checkFileSuffix(String filesuffix, String suffixName[]) { String[] suffixNames = suffixName; if (Arrays.asList(suffixNames).contains(filesuffix)) { return true; } else { return false; } } /** * 獲取儲存路徑 * * @param folder 資料夾 * @return */ private Pathstr getPath(String folder) { WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext(); ServletContext servletContext = webApplicationContext.getServletContext(); Pathstr pathstr = new Pathstr(); // 得到檔案絕對路徑 pathstr.setAbsolutePath(servletContext.getRealPath("/UpLoad/" + folder)); // 得到檔案相對路徑 pathstr.setRelativePath(servletContext.getContextPath()); return pathstr; } } /** * 取得路徑 * * @author mingqi_QIAN * */ class Pathstr { private String relativePath;// 相對路徑 private String absolutePath;// 絕對路徑 /** * 相對路徑 * * @return */ public String getRelativePath() { return relativePath; } /** * 獲得相對路徑 * * @param relativePath */ public void setRelativePath(String relativePath) { this.relativePath = relativePath; } /** * 絕對路徑 * * @return */ public String getAbsolutePath() { return absolutePath; } /** * 獲得絕對路徑 * * @param absolutePath */ public void setAbsolutePath(String absolutePath) { this.absolutePath = absolutePath; } }