Java 中根據文件地址和文件路徑下載文件demo

@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();
       }

   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章