MultipartFile檔案上傳 多檔案上傳 接受js檔案
阿新 • • 發佈:2018-12-14
本次帶來的是MultipartFile多檔案檔案上傳,可以在sql執行完成,沒有出現異常,再將檔案儲存進我們的伺服器,如果出現異常,檔案不會上傳到我們的伺服器
上傳圖片工具類
import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.math.RandomUtils; import org.springframework.web.multipart.MultipartFile; public class FileLoad { public static Map load(HttpServletRequest request, HttpServletResponse response, MultipartFile[] file) { // map 儲存MultipartFile[]檔案陣列 File類上傳路徑及陣列 上傳路徑及名稱(將其儲存進資料庫) Map map = new HashMap(); // 上傳檔名加路徑 List<String> listFilePath = new ArrayList<String>(); // File提供路徑及檔名 List<File> listFile = new ArrayList<File>(); // 定義儲存路徑 String filePath = request.getServletContext().getRealPath("/file"); System.err.println("上傳路徑是:" + filePath); // 設定檔案上傳大小為50MB int fileSize = 50000000; // 最終要儲存的檔名稱 String loadfileName = ""; // 檔案字尾 String suffix; // 判斷檔案陣列是否為空 if (file != null) { // 計算一次檔案累加不餓能超過50MB long fs = 0; for (int i = 0; i < file.length; i++) { fs += file[i].getSize();// 檔案大小累加 } System.out.println(fs); // 判斷檔案累加不能超過50MB if (fs < fileSize) { for (int i = 0; i < file.length; i++) { // 判斷是否上傳真檔案 利用上傳檔名字是否等於空字元 可能會出現假檔案 if (file[i].getOriginalFilename() != "" && file[i].getOriginalFilename() != null) { // 獲取使用者上傳檔名 String oldfileName = file[i].getOriginalFilename(); // 使用工具類FilenameUtils 擷取原始檔名的字尾 suffix = FilenameUtils.getExtensionName(oldfileName); System.out.println("原檔名:" + oldfileName); System.out.println("字尾:" + suffix); // 判斷檔名字尾是否等於 gif,jpg,jpeg,bmp,png if (suffix.equals("gif") || suffix.equals("jpg") || suffix.equals("jpeg") || suffix.equals("bmp") || suffix.equals("png")) { // 生成上傳檔名,當前時間加隨機數 String fileName = System.currentTimeMillis() + RandomUtils.nextInt(1000000) + "." + suffix; // 要上傳的路徑和檔名 File targetFile = new File(filePath, fileName); if (!targetFile.exists()) { targetFile.mkdirs(); } try { // 不在這裡執行檔案儲存 // file[i].transferTo(targetFile); // loadfileName=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/kuangjia/loadImg/"+fileName; loadfileName = filePath + File.separator + fileName;// 本地路徑,上邊的是伺服器路徑 listFile.add(targetFile); listFilePath.add(loadfileName); System.err.println("最後上傳的路徑:(儲存到資料庫的路徑)" + loadfileName); } catch (Exception e) { e.printStackTrace(); request.setAttribute("fileError", "檔案上傳失敗"); System.err.println("檔案儲存異常"); } } else { request.setAttribute("fileError", "檔案上傳型別不符"); } } else { System.out.println("出現假檔案,將假檔案從記憶體清理掉"); file = clearFile(i, file); } } } else { request.setAttribute("fileError", "上傳檔案總數大於50MB"); } } map.put("FilePath", listFilePath); map.put("File", listFile); map.put("MultipartFile", file); return map; } // 清理假檔案 public static MultipartFile[] clearFile(int index, MultipartFile[] file) { MultipartFile[] fileNew = new MultipartFile[file.length - 1]; for (int i = index; i < file.length; i++) { file[i] = file[i + 1]; } System.arraycopy(file, 0, fileNew, 0, file.length); return fileNew; } }
獲取檔名字尾工具類
public class FilenameUtils { public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } }
控制器程式碼:
將檔案提交進去不會馬上儲存,可以執行完sql再進行儲存
public void webupload(HttpServletRequest request, HttpServletResponse response, MultipartFile[] fileimg) { Map map = FileLoad.load(request, response, fileimg); List<String> listpath = (List)map.get("FilePath"); List<File> listFile = (List)map.get("File"); MultipartFile[] file = (MultipartFile[])map.get("MultipartFile"); /* * 我假裝在這裡執行了sql */ //判斷儲存資料條數是否正常 如果sql執行沒有問題 再將檔案儲存在伺服器 for(int i = 0; i < listFile.size(); i++) { try { file[i].transferTo(listFile.get(i)); }catch (Exception e) { System.out.println("檔案儲存異常"); request.setAttribute("fileError", "檔案儲存異常"); } } System.out.println("儲存完畢"); }
以下是一個webupload上傳demo,可以體驗一下
https://download.csdn.net/download/qq_43510878/10850082