swagger Excel下载 文件名乱码
导出后文件名变成下划线
今天下午做模板导出的时候,swagger下载后文件名变成了下滑线,网速搜后发现,tomcat中使用的编码格式为ISO8859-1
String filename = new String(name.getBytes(“UTF-8”),“ISO8859-1”);
方法把文件名通过utf-8 解析成baty数组,然后通过ISO8859-1 编码的方式生产filename,
这就使tomcat 可以将文件名正确编译,返回给浏览器后按编译相反方法解析出文件名,交给浏览器,浏览器就可以通过设定的编码格式正确得到文件名,
由于tomcat 默认的编码格式是ISO8859-1,所以filename只能转一次ISO8859-1格式的名字
String filename = new String(name.getBytes("UTF-8"),"ISO8859-1");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
File file = new File(path);
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream out = response.getOutputStream();
int len = 0;
byte[] by = new byte[1024*10];
while ((len = fileInputStream.read(by))>0){
out.write(by,0,len);
问题又来了
设定完filename 下载后,文件名不是下划线了,又变成乱码,一下午好生鼓捣,后来同事提醒,可能swagger问题,
然后通过浏览器拼参数直接调接口,文件名终于可以正常显示了
swagger在spring boot项目中配置暂时没搞明白,留着后续更新,
…未完待续
@ApiOperation(value = "Excel数据导出")
@GetMapping("/ExcelData/download")
public void download(String id,HttpServletResponse response){
String path = "\\Files\\"+ excelUploadService.getFilePath(id);
String name = excelUploadService.getFileName(id)+".xlsx";
InputStream inputStream = null;
try {
//将name 按照utf-8编码方式 拆成bytes数组, 再通过ISO8859-1方式 生成新的字符串
String filename = new String(name.getBytes("UTF-8"),"ISO8859-1");
//设置以流的方式传送
response.setContentType("application/octet-stream");
//设置响应头
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
File file = new File(path);
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream out = response.getOutputStream();
int len = 0;
byte[] by = new byte[1024*10];
while ((len = fileInputStream.read(by))>0){
out.write(by,0,len);
}
out.close();
fileInputStream.close();
}catch (IOException e){
e.printStackTrace();
}
}
入行两个月,第一次在写些东西,希望自己能坚持学习吧
来源:CSDN
作者:A司马世豪
链接:https://blog.csdn.net/weixin_45586393/article/details/103601793