发现网上的这种方法不是很好用:new String(formFileName.getBytes("UTF-8"), "ISO-8859-1")

现在使用的是:

java.net.URLEncoder.encode(fileName, "UTF-8")

  前台再对文件名进行URLDecoder就可以了。

以下是代码:

java导出excel加密 java导出excel文件名乱码_java导出excel加密

java导出excel加密 java导出excel文件名乱码_excel_02

@PostMapping(value = "/export")
    public void export(@RequestBody Map<String,String> map, HttpServletRequest request, HttpServletResponse response){
        InputStream in = null;
        String fileNamePrefix = "fileNamePrefix_";
        String rootpath = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String nowDateTime = sdf.format(new Date());
        String cycle = "";

        String fileName = fileNamePrefix + nowDateTime + UUID.randomUUID().toString().substring(0, 8) + ".xlsx";
        try {
            // 路径;
            rootpath = System.getProperty("user.dir")+"\\download\\";

           //此方法导出数据到指定文件
            exportSystemSumResult(systemMouldResult, rootpath, fileName);
            log.info("download file path:" + rootpath + fileName);
            response.reset();// 清空输出流
            response.setCharacterEncoding("utf-8");
            response.setContentType("multipart/form-data");
            response.setHeader("Content-disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
            // 定义输出类型
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            in = new FileInputStream(rootpath + fileName);
            response.setHeader("Content-Length", String.valueOf(in.available()));
            int n = 1024;
            byte[] buffer = new byte[n];
            while (in.read(buffer, 0, n) != -1) {
                response.getOutputStream().write(buffer);
            }
        } catch(FileNotFoundException e){
            log.info("无数据!");
        }catch (IOException e) {
            log.error("导出失败,", e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException io) {
                    log.error("关闭输出流失败", io);
                }
            }
            if (deleteFile(rootpath + fileName)) {
                log.info("delete file success,file path:" + rootpath + fileName);
            } else {
                log.error("delete file fail,file path:" + rootpath + fileName);
            }
        }
    }