public class DownFileUtils {
/**
* 下载项目目录下的模板文件
* @param httpRequest 请求信息
* @param httpResponse 响应信息
* @param pathFileName 带路径的文件名字
*/
public static void downloadLocalTemplate(HttpServletRequest httpRequest, HttpServletResponse httpResponse, String pathFileName) throws Exception {
// 通过路径获取项目中的文件
byte[] bytes = ResourceUtil.readBytes(pathFileName);
InputStream fis = new ByteArrayInputStream(bytes);
// 分隔路径
String[] split = pathFileName.split("/");
// 获取模板名称
String rawFileName = split[split.length - 1];
// 名称
String fileName = FileNameUtil.getPrefix(rawFileName);
// 类型
String suffix = FileNameUtil.getSuffix(rawFileName);
// 构建响应信息
httpResponse.setContentType("application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
httpResponse.setHeader("Content-Disposition", "attachment;filename=" + getFileName(fileName, httpRequest) + "." + suffix);
ServletOutputStream outputStream = httpResponse.getOutputStream();
if (fis.available() != 0) {
// 设置响应码
httpResponse.setStatus(200);
}
// 导出文件流
IOUtils.copy(fis, outputStream);
fis.close();
outputStream.flush();
outputStream.close();
}
/**
* 处理文件名字编码
* @param fileName 文件名字
* @param request 请求信息
* @return 编码后文件名
* @throws Exception 异常信息
*/
private static String getFileName(String fileName, HttpServletRequest request) throws Exception {
String ua = request.getHeader("User-Agent").toLowerCase();
if (ua.contains("macintosh") && !ua.contains("chrome")) {
//浏览器: safari
return new String(fileName.getBytes(), "ISO8859-1");
}
//默认utf-8
return URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
}
}
JAVA导出文件
最新推荐文章于 2025-09-15 15:56:01 发布
855

被折叠的 条评论
为什么被折叠?



