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