springboot下载resource下的文件
import java.io.*;
import java.net.URLEncoder;
import org.springframework.core.io.ClassPathResource;
@Override
public void downloadExcel(HttpServletResponse response) {
ClassPathResource resource = new ClassPathResource("static/人员信息导入模板.xls");
// 设置HTTP响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+URLEncoder.encode("人员信息导入模板.xls", "utf-8"));
response.setCharacterEncoding("utf-8");
// 使用try-with-resources语句来自动关闭资源
try (BufferedInputStream in = new BufferedInputStream(resource.getInputStream());
OutputStream out = response.getOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
// 读取文件内容并写入到HTTP响应中
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
// 刷新输出流以确保所有数据都被发送
out.flush();
} catch (IOException ex) {
// 处理异常,例如记录日志或设置错误响应
throw new ServiceException("人员信息导入模板下载失败");
}
//方法二
// InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("static/人员信息导入模板.xls");
// getFileContent(inputStream,"staffImportExcel.xls",response,request);
}
方法二
public void getFileContent(InputStream inputStream, String name, HttpServletResponse response, HttpServletRequest request) {
// 清空response
response.reset();
try {
InputStream in = inputStream;
response.setHeader("Content-Length", String.valueOf(in.available()));
byte[] buffer = new byte[in.available()];
//不加打开会文件损坏
in.read(buffer);
in.close();
String userAgent = request.getHeader("User-Agent");
String fileName;
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(name, "UTF-8");
} else {
// 非IE浏览器的处理:
fileName = new String(name.getBytes("UTF-8"), "ISO-8859-1");
}
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}