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