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