| package com.dy.dyFile.download; | 
|   | 
| import com.dy.pmsGlobal.dyFile.FileOperate; | 
| import com.dy.pmsGlobal.dyFile.FileRestVo; | 
| import com.dy.pmsGlobal.pojoOth.OthFile; | 
| 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{ | 
|             OthFile 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); | 
|         } | 
|   | 
|     } | 
| } |