@GetMapping(value = "/getFileStream/{fileId}")
public void getFileStream(@PathVariable("fileId")Long fileId, HttpServletResponse response) {
BpFile bpFile = iBpFileService.selectBpFileById(fileId);
String fileAddress = bpFile.getFilePath()+"/"+bpFile.getFileName();
String fileName = bpFile.getFileName();
File file = new File(fileAddress);
if (!file.isFile()) {
throw new RuntimeException("文件不存在");
}
InputStream inputStream = null;
OutputStream outputStream = null;
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
fileName = new String(fileName.getBytes("UTF-8"), "GBK");
response.reset(); // 非常重要
// 设置响应类型
if ("jpg/jpeg/png/bmp/gif/tif/icon/ico".contains(file.getName().substring(file.getName().lastIndexOf(".") + 1).toLowerCase())) {
response.setContentType("text/html; charset=UTF-8");
response.setContentType("image/jpeg");
} else {
response.setContentType("application/octet-stream;charset=UTF-8");
logger.info("下载文件名="+fileName);
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
}
logger.info("更新修改1="+fileName);
response.setContentLength((int) file.length());
inputStream = new FileInputStream(file);
outputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
// byte[] buffer = new byte[1024];
// while (true) {
// int len = inputStream.read(buffer);
// if (len == -1) {
// break;
// }
// outputStream.write(buffer, 0, len);
// }
outputStream.flush();
} catch (Exception e) {
logger.error("文件读取异常,原因:{}", e.toString());
throw new RuntimeException("文件读取异常");
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
<a class="btn btn-success btn-xs " target="_blank" href="/getFileStream/222"><i class="fa fa-edit"></i>问题供应商历史问题清理.xlsx</a>