| New file | 
 |  |  | 
 |  |  | package com.dy.pipIrrWebFile.download; | 
 |  |  |  | 
 |  |  | import com.dy.pipIrrGlobal.dyFile.FileOperate; | 
 |  |  | import com.dy.pipIrrGlobal.dyFile.FileRestVo; | 
 |  |  | import com.dy.pipIrrGlobal.pojoFi.WebFile; | 
 |  |  | import jakarta.servlet.ServletOutputStream; | 
 |  |  | import jakarta.servlet.http.HttpServletRequest; | 
 |  |  | import jakarta.servlet.http.HttpServletResponse; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.web.bind.annotation.GetMapping; | 
 |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
 |  |  | import org.springframework.web.bind.annotation.RestController; | 
 |  |  |  | 
 |  |  | import java.io.File; | 
 |  |  | import java.io.FileInputStream; | 
 |  |  | import java.net.URLEncoder; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * web文件下载 | 
 |  |  |  */ | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | @RequestMapping(path="download") | 
 |  |  | @SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked") | 
 |  |  | public class DownloadFileCtrl { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DownloadFileSv sv ; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private FileOperate fileOp ; | 
 |  |  |  | 
 |  |  |     @Value("${dy.webFile.fmUrl}") | 
 |  |  |     private String fmUrl ; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 通过web文件数据库实体id下载该文件 | 
 |  |  |      * @param id | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("/down") | 
 |  |  |     public void down(String id, HttpServletRequest req, HttpServletResponse rep){ | 
 |  |  |         try{ | 
 |  |  |             WebFile fPo = sv.selectById(id) ; | 
 |  |  |             if(fPo != null){ | 
 |  |  |                 FileRestVo frVo = fileOp.parseHashcode(fmUrl, fPo.hash) ; | 
 |  |  |                 if(frVo.fileSysAbsolutePath != null){ | 
 |  |  |                     if(!frVo.fileSysAbsolutePath.endsWith("\\\\") && !frVo.fileSysAbsolutePath.endsWith("/") ){ | 
 |  |  |                         frVo.fileSysAbsolutePath = frVo.fileSysAbsolutePath + "/" ; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 String filePath = frVo.fileSysAbsolutePath + fPo.filePath ; | 
 |  |  |                 File f = new File(filePath) ; | 
 |  |  |                 if(f.exists()){ | 
 |  |  |                     String fileReName = fPo.orgName + "." + fPo.extName ; | 
 |  |  |                     //URLEncoder.encode可以防止中文乱码 | 
 |  |  |                     fileReName = URLEncoder.encode(fileReName, "UTF-8").replaceAll("\\+", "%20"); | 
 |  |  |                     rep.addHeader("content-type", "application/octet-stream"); | 
 |  |  |                     rep.addHeader("Content-Disposition", "attachment;fileName=" + fileReName); | 
 |  |  |  | 
 |  |  |                     ServletOutputStream out = null; | 
 |  |  |                     FileInputStream in = null ; | 
 |  |  |                     try { | 
 |  |  |                         out = rep.getOutputStream() ; | 
 |  |  |                     } catch (Exception ee) { | 
 |  |  |                         out = null ; | 
 |  |  |                     }finally{ | 
 |  |  |                         if(out != null){ | 
 |  |  |                             byte[] bs = new byte[1024] ; | 
 |  |  |                             int len = -1 ; | 
 |  |  |                             try { | 
 |  |  |                                 in = new FileInputStream(f); | 
 |  |  |                                 len = in.read(bs) ; | 
 |  |  |                                 while(len != -1){ | 
 |  |  |                                     out.write(bs, 0, len); | 
 |  |  |                                     len = in.read(bs) ; | 
 |  |  |                                 } | 
 |  |  |                             } catch (Exception eee) { | 
 |  |  |                             } finally { | 
 |  |  |                                 if(out != null){ | 
 |  |  |                                     try{ | 
 |  |  |                                         out.flush(); | 
 |  |  |                                         out.close(); | 
 |  |  |                                     }catch(Exception e){ | 
 |  |  |                                     }finally{ | 
 |  |  |                                         if(in != null){ | 
 |  |  |                                             try{ | 
 |  |  |                                                 in.close(); | 
 |  |  |                                             }catch(Exception e){ | 
 |  |  |                                             } | 
 |  |  |                                         } | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 }else{ | 
 |  |  |                 } | 
 |  |  |             }else{ | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("下载文件时异常", e); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  | } |