public void downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) {
String fileName = "xxx";
//下面是源文件的路径,也可以自己定义,例如:D:\TEMPLATE\
//ExcelTemplateDTO excelTemplateDTO = //sysCfgService.getValueObject("EXCEL_TEMPLATE_PARAM", ExcelTemplateDTO.class);
String filePath = excelTemplateDTO.getExportTemplateUrl() + File.separator + fileName + ".xlsx";
log.info("导入模板路径" + filePath);
FileInputStream fin = null;
FileChannel channel = null;
try {
request.setCharacterEncoding("UTF-8");
File file = new File(filePath);
long fileLength = file.length();
fin = new FileInputStream(file);
//对中文名进行编码,解决中文乱码
String encodedFileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//指定文件下载,并解决中文名乱码
response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + encodedFileName);//重点
response.setHeader("Content-Length", String.valueOf(fileLength));
response.setContentType("application/octet-stream");
response.setContentType("application/force-download");
channel = fin.getChannel();
int buffSize = 1024;
ByteBuffer buffer = ByteBuffer.allocate(4096);
byte[] byteArr = new byte[buffSize];
int nGet = 0;
while (channel.read(buffer) != -1) {
buffer.flip();
while (buffer.hasRemaining()) {
nGet = Math.min(buffer.remaining(), buffSize);
// read bytes from disk
buffer.get(byteArr, 0, nGet);
// write bytes to output
response.getOutputStream().write(byteArr);
}
buffer.clear();
}
} catch (Exception e) {
log.error("下载Excel模板失败");
e.printStackTrace();
} finally {
if (channel != null && fin != null) {
try {
channel.close();
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
java使用nio的方式下载文件
最新推荐文章于 2023-09-25 15:57:35 发布