2023-01-21 一、文件下載 1、實現文件下載步驟 (1)準備文件下載相關步驟 (2)將ResponseEntity<T>對象,作為方法返回值 (3)為ResponseEntity<T>對象,設置三個參數 2、示例代碼 @RequestMapping("/fileDownloadControl ...
2023-01-21
一、文件下載
1、實現文件下載步驟
(1)準備文件下載相關步驟
(2)將ResponseEntity<T>對象,作為方法返回值
(3)為ResponseEntity<T>對象,設置三個參數
2、示例代碼
@RequestMapping("/fileDownloadController") public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,String filename){ ResponseEntity<byte[]> responseEntity = null; try { //獲取文件位置 //獲取文件真實路徑【(request|session)->ServletContext】 String realPath = request.getServletContext().getRealPath("/WEB-INF/download/" + filename); //輸入流 InputStream is = new FileInputStream(realPath); //文件下載 byte[] bytes = new byte[is.available()]; is.read(bytes); //設置響應頭 HttpHeaders headers = new HttpHeaders(); //設置要下載的文件的名字(及文件格式為附件格式,通知伺服器下載當前資源,而不是打開) headers.add("Content-Disposition","attachment;filename"); //處理中文文件名問題 headers.setContentDispositionFormData("attachment",new String(filename)); //狀態碼 responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK); is.close(); } catch (Exception e) { e.printStackTrace(); } return responseEntity; }
二、文件上傳
1、實現文件上傳思路
(1)準備工作
①準備文件上傳頁面
表單的提交方式必須為POST
設置表單enctype屬性值為multipart/form-data
表單中包含文件域(type=file)
②導入jar包
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
③裝配解析器:CommonsMultipartResolver
<!-- 裝配CommonsMultipartResolver--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <!-- 設置字元集--> <property name="defaultEncoding" value="utf-8"></property> <!-- 設置總文件的大小--> <property name="maxUploadSize" value="102400"></property> </bean>
(2)實現步驟
①將type=file(文件域)直接入參:MultipartFile類型即可
②獲取文件名稱
@Controller public class FileUploadController { @RequestMapping("/fileUploadController") public String fileUploadController(String username, MultipartFile updateFile, HttpSession session){ try { //獲取文件名稱 String filename = updateFile.getOriginalFilename(); //獲取上傳路徑 String realPath = session.getServletContext().getRealPath("/WEB-INF/upload"); //判斷上傳路徑是否存在(如不存在,創建) File filePath = new File(realPath); if(!filePath.exists()){ filePath.mkdirs(); } //實現文件上傳 //File.separator:是系統預設的分隔符 File uFile = new File(filePath+File.separator+filename); updateFile.transferTo(uFile); } catch (IOException e) { e.printStackTrace(); } return "success"; } }
三、文件上傳優化
1、允許同名文件上傳
(1)使用UUID解決文件名重覆問題
UUID是一個32位16進位隨機數(特點:唯一性)
//實現文件上傳 //解決重覆文件名上傳的方式 String uuid = UUID.randomUUID().toString().replace("-", ""); //File.separator:是系統預設的分隔符 File uFile = new File(filePath+File.separator+uuid+filename);
(2)使用時間戳解決文件名重覆問題
System.currentTimeMillis()
2、設置上傳文件大小上限
在裝配CommonsMultipartResolver時,設置上傳文件的上限
<!-- 裝配CommonsMultipartResolver--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <!-- 設置字元集--> <property name="defaultEncoding" value="utf-8"></property> <!-- 設置總文件的大小--> <property name="maxUploadSize" value="102400"></property> </bean>