@GetMapping(value = "/downloadSimpleFile") public String downloadSimpleFile(@RequestParam(name = "fileName",required = true) String fileName, @RequestParam(name = "filePath",required = true) String filePath, HttpServletResponse response, HttpServletRequest request) { LOGGER.info("調用立案端下載單個文件接口"); try { if(StringUtils.isBlank(fileName) || StringUtils.isBlank(filePath)){ throw new Exception("文件名稱和文件路徑不能爲空"); } URL url = new URL(filePath); HttpURLConnection con = (HttpURLConnection) url.openConnection(); int httpRequestCode = con.getResponseCode(); if(httpRequestCode != 200){ LOGGER.info("文件下載出錯,錯誤碼:"+httpRequestCode); throw new Exception("文件下載錯誤,錯誤碼:"+httpRequestCode); } // 將文件讀入文件流 InputStream inputStream = con.getInputStream(); // 獲得瀏覽器代理信息 final String userAgent = request.getHeader("USER-AGENT"); // 判斷瀏覽器代理並分別設置響應給瀏覽器的編碼格式 String finalFileName = null; if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {// IE瀏覽器 finalFileName = URLEncoder.encode(fileName, "UTF8"); System.out.println("IE瀏覽器"); } else if (StringUtils.contains(userAgent, "Mozilla")) {// google、火狐瀏覽器 finalFileName = new String(fileName.getBytes(), "ISO8859-1"); } else { finalFileName = URLEncoder.encode(fileName, "UTF8");// 其他瀏覽器 } // 設置HTTP響應頭 response.reset();// 重置 響應頭 response.setContentType(URLConnection.getFileNameMap().getContentTypeFor(filePath));// 告知瀏覽器下載文件,而不是直接打開,瀏覽器默認爲打開 response.addHeader("Content-Disposition", "attachment;filename=" + finalFileName);// 下載文件的名稱 // 循環取出流中的數據 byte[] b = new byte[1024]; int len; while ((len = inputStream.read(b)) > 0) { response.getOutputStream().write(b, 0, len); } inputStream.close(); response.getOutputStream().close(); LOGGER.info("調用單個文件下載接口-----downloadSimpleFile--完成-----輸入參數:fileName="+fileName+"////filePath="+filePath); return ""; }catch (Exception e){ e.printStackTrace(); LOGGER.info(fileName + "==========下載出錯===========" + filePath); return e.getMessage(); } }
Java 中根據文件地址和文件路徑下載文件demo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.