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