国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

Spring MVC的文件下載實例詳解

2024-09-05 00:23:02
字體:
來源:轉載
供稿:網友

Spring MVC的文件下載實例詳解

讀取文件

要下載文件,首先是將文件內容讀取進來,使用字節數組存儲起來,這里使用spring里面的工具類實現

import org.springframework.util.FileCopyUtils;  public byte[] downloadFile(String fileName) {    byte[] res = new byte[0];    try {      File file = new File(BACKUP_FILE_PATH, fileName);      if (file.exists() && !file.isDirectory()) {        res = FileCopyUtils.copyToByteArray(file);      }    } catch (IOException e) {      logger.error(e.getMessage());    }    return res;  }

這個數組就是文件的內容,后面將輸出到響應,供瀏覽器下載

下載文件的響應

下載文件的響應頭和一般的響應頭是有所區別的,而這里面還要根據用戶瀏覽器的不同區別對待

我把生成響應的代碼封裝成了一個方法,這樣所有下載響應都可以調用這個方法了,避免重復代碼到處寫

 protected ResponseEntity<byte[]> downloadResponse(byte[] body, String fileName) {    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder        .getRequestAttributes()).getRequest();    String header = request.getHeader("User-Agent").toUpperCase();    HttpStatus status = HttpStatus.CREATED;    try {      if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {        fileName = URLEncoder.encode(fileName, "UTF-8");        fileName = fileName.replace("+", "%20");  // IE下載文件名空格變+號問題        status = HttpStatus.OK;      } else {        fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");      }    } catch (UnsupportedEncodingException e) {}    HttpHeaders headers = new HttpHeaders();    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    headers.setContentDispositionFormData("attachment", fileName);    headers.setContentLength(body.length);    return new ResponseEntity<byte[]>(body, headers, status);  }

這里需要注意,一般來說下載文件是使用201狀態碼的,但是IE瀏覽器不支持,還得我花了很大力氣才找出來是那個問題

其中對文件名的處理是為了防止中文以及空格導致文件名亂碼

控制器方法

在控制器的那里需要對返回值進行處理

@RequestMapping(value = "/download-backup", method = RequestMethod.GET)  @ResponseBody  public ResponseEntity<byte[]> downloadBackupFile(@RequestParam String fileName) {    byte[] body = backupService.downloadFile(fileName);    return downloadResponse(body, fileName);  } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石狮市| 郎溪县| 凤台县| 孝义市| 韩城市| 紫云| 界首市| 新河县| 滕州市| 郸城县| 雷波县| 道孚县| 渝北区| 兴业县| 明光市| 大安市| 吴忠市| 东兰县| 林口县| 武宁县| 牟定县| 宜昌市| 顺义区| 库尔勒市| 子洲县| 虎林市| 凉城县| 龙岩市| 蓬溪县| 平武县| 延川县| 织金县| 石嘴山市| 湟中县| 临泽县| 霍邱县| 平阴县| 高唐县| 上蔡县| 尚志市| 兰州市|