SpringBoot 文件上傳實踐
背景:將上傳的文件,如圖片,寫入指定服務器路徑,保存起來。多文件上傳時,由于HttpServletRequest不能直接取出文件數據,所以將其強制轉換為MultipartHttpServletRequest。本文使用Postman模擬表單提交。
1 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 2 Map<String,MultipartFile> files = multipartRequest.getFileMap();
后臺實現:
/** * @Title uploadFiles * @Description 測試多文件上傳 * @date 2018-11-10 10:15 */ @PostMapping("/uploadFiles") public Map<String, Object> uploadFiles(HttpServletRequest req) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req; // 無須知道上傳時文件對應的key,遍歷處理 Map<String, MultipartFile> files = multipartRequest.getFileMap(); String otherParam = req.getParameter("otherParam"); Map<String, Object> data = new HashMap<>(); for (MultipartFile value : files.values()) { data = uploadFile(value); int code = (int) data.get("code"); if (200 != code) { return data; } } data.put("code", 200); data.put("result", otherParam); return data; } /** * @Title uploadFile * @Description 逐個上傳 * @date 2018-11-10 10:17 */ private Map<String, Object> uploadFile(MultipartFile file) { Map<String, Object> result = new HashMap<>(); // 判斷文件是否為空 if (file.isEmpty()) { result.put("code", -1); return result; } String fileName = file.getOriginalFilename(); // 原文件名前加時間戳和隨機數,避免覆蓋文件 String path = "D:/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); path = path + ((int) Math.random() * 999) + "_" + fileName; File dest = new File(path); if (dest.exists()) { result.put("code", -2); return result; } // 判斷文件父目錄是否存在 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } try { file.transferTo(dest); // 保存文件 } catch (IOException e) { result.put("code", -3); return result; } result.put("code", 200); return result; }
Postman模擬提交時,配置如圖:

環境:springBootVersion 版本 '1.5.3.RELEASE'。
參考文獻:http://www.rzrgm.cn/chevin/p/9260842.html。
讀后有收獲,小禮物走一走,請作者喝咖啡。
Buy me a coffee. ?Get red packets.作者:樓蘭胡楊
本文版權歸作者和博客園共有,歡迎轉載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。

浙公網安備 33010602011771號