springboot-檔案上傳
阿新 • • 發佈:2020-12-23
技術標籤:springboot
1.yml配置檔案
spring:
servlet:
multipart:
max-file-size: 1000MB #單檔案上傳大小
max-request-size: 1000MB #全部檔案大小
2.pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.前端HTML程式碼
<p>單檔案上傳</p> <form action="upload" method="post" enctype="multipart/form-data"> 檔案:<input type="file" name="file"/> <input type="submit"> </form> <hr/> <p>檔案下載</p> <a href="download">下載檔案</a> <hr> <p>多檔案上傳</p> <form action="batch" method="post" enctype="multipart/form-data"> <p>檔案1:<input type="file" name="file"></p> <p>檔案2:<input type="file" name="file"></p> <p><input type="submit" value="上傳"></p> </form>
4.controller程式碼
@RestController public class FileController { private static final String filePath = "E:\\upload\\"; private static final Logger logger = LoggerFactory.getLogger(FileController.class); /** * 單檔案上傳 * * @param file * @return */ @RequestMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { try { if (file.isEmpty()) { return "檔案為空"; } //獲取檔名 String fileName = file.getOriginalFilename(); logger.info("上傳的檔名是:" + fileName); //設定檔案的儲存路徑 String path = filePath + fileName; File dest = new File(path); //檢測是都存在目錄 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); //新建資料夾 } file.transferTo(dest); //檔案寫入 return "上傳成功"; } catch (IOException e) { e.printStackTrace(); } return "上傳失敗"; } /** * 多檔案上傳 * * @param request * @return */ @PostMapping("/batch") public String handleFileUpload(HttpServletRequest request) { List<MultipartFile> files = ((MultipartRequest) request).getFiles("file"); MultipartFile file = null; BufferedOutputStream stream = null; for (int i = 0; i < files.size(); i++) { file = files.get(i); if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); stream = new BufferedOutputStream(new FileOutputStream(new File(filePath + file.getOriginalFilename()))); stream.write(bytes); stream.close(); } catch (Exception e) { stream = null; e.printStackTrace(); return "第 " + i + " 個檔案上傳失敗 ==> " + e.getMessage(); } } else { return "第 " + i + " 個檔案上傳失敗 ==> 因為檔案為空"; } } return "上傳成功"; } /** * 檔案下載 */ @GetMapping("/download") public String download(HttpServletResponse response) { String fileName = "_DSC1310.ARW"; if (fileName != null) { //設定檔案路徑 File file = new File(filePath + fileName); if (file.exists()) { response.setContentType("application/force-download"); //設定強制下載 不開啟 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); //設定檔名 byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } return "下載成功"; } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } return "下載失敗"; } }