swagger Excel下载 文件名乱码

◇◆丶佛笑我妖孽 提交于 2019-12-21 05:00:35

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();
        }
    }

入行两个月,第一次在写些东西,希望自己能坚持学习吧

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!