spring boot 簡單檔案上傳 返回
阿新 • • 發佈:2018-12-18
首先檔案要有存放的地方
在application.yml中配置
spring:
servlet:
multipart:
location: /Users/chenweiqi/IdeaProjects/mq/temp/file
controller中接收,儲存檔案
@RequestMapping(value = "/test/upload/file",method = RequestMethod.POST) public R upload(@RequestParam("file") MultipartFile multipartFile){ if (multipartFile.isEmpty()){ //檔案為空的時候返回錯誤 return R.Error(); } String fileName = multipartFile.getOriginalFilename(); //int size = (int) multipartFile.getSize(); File file = new File(fileName); if (file.getParentFile()!=null && !file.getParentFile().exists()){ file.getParentFile().mkdirs(); } try { //儲存檔案 multipartFile.transferTo(file); } catch (IOException e) { e.printStackTrace(); return R.Error(); } return R.Ok(); }
檔案儲存了 現在前端請求需要返回檔案了
controller 中定義變數。獲取最開始定義的檔案路徑
@Value("${spring.servlet.multipart.location}")
String filePath;
返回檔案有很多寫法。這裡通過 response 直接寫入。
直接根據url請求獲取檔名。讀取後直接返回。
@RequestMapping(value = "/test/file/{fileName:[a-zA-Z0-9\\.]+}",method = RequestMethod.GET) public void getFile(@PathVariable(name = "fileName") String fileName, HttpServletResponse response){ File file = new File(filePath+File.separator+fileName); System.out.println(file); if (!file.exists()){ throw new RuntimeException("檔案不存在"); } try { FileInputStream fileInputStream =new FileInputStream(file); ServletOutputStream outputStream = response.getOutputStream(); byte[] temp = new byte[1024]; while(fileInputStream.read(temp) >0){ outputStream.write(temp); } fileInputStream.close(); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } }