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