使用阿里EasyExcel下载excle的简单样例记录,包含前后端核心代码,主要记录中文文件名称乱码问题的处理。

EasyExcle的使用不再多做记录,EasyExcel教程-阿里云开发者社区 (aliyun.com)中内容详细。

在通过后端进行文件下载时,经常会遇到乱码问题,网上可以搜索到多种解决方案,尝试了多种方式后记录下如下一种可行方案的核心代码。

后端代码:

@GetMapping("download")
public void download(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码,所有通过后端的文件下载都可以如此处理String fileName = URLEncoder.encode("数据写出", "UTF-8");//建议加上该段,否则可能会出现前端无法获取Content-dispositionresponse.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data());
}

前端可以采用两种方式执行下载:

第一种:

直接使用window.location.href = "downloadUrl";

该方式直接通过浏览器的对response的内容进行处理,浏览器会对文件名称进行相应的decode,从而保证我们下载的文件名称正常

第二种:

通过ajax请求,异步调用下载方法。

通过该方式下载,如果采用swaggerui或者postman测试会发现返回的header中filename为encode后的名称,点击swaggerui中的下载下载后的文件名称也是未decode的名称,很多文章将这归咎为swagger导致的但没有说明是怎么导致的,我也在这困惑很久。现在我猜测是他们通过swagger测试下载的文件名称错误,后续直接采用了上面的第一种方法,成功下载,便将原因归咎到了swagger中。如下是vue axios异步下载的一种方案:

  mounted() {axios({method: "get",url: "http://localhost:9104/download",responseType: "arraybuffer"}).then(response => {//通过header中获取返回的文件名称let fileName = response.headers['content-disposition'].split(";")[1].split("filename=")[1]let blob = new Blob([response.data], { type: "application/vnd.ms-excel" })let downloadElement = document.createElement("a")var href = window.URL.createObjectURL(blob)downloadElement.href = href//指定下载的文件的名称,切记进行decodedownloadElement.download = decodeURI(fileName)document.body.appendChild(downloadElement)downloadElement.click()//移除临时创建对象,释放资源document.body.removeChild(downloadElement)window.URL.revokeObjectURL(href)});}

一次踩坑记录,如果错误还望指正。

注意:如上代码前端为Chrome浏览器,其他浏览器并未验证。

使用EasyExcel下载,文件名乱码问题处理相关推荐

  1. php ie 下载 乱码,php ie下载文件名乱码怎么办

    php ie下载文件名乱码的解决办法:1.通过header方法解决乱码:2.通过"function remote_filesize($uri,$user='',$pw='') {...}&q ...

  2. java文件名的编码格式_java下载文件名乱码解决方法详解

    java下载文件名乱码的方法:(推荐:java视频教程) 每个浏览器的编码不一样,火狐采用的是base64.ie和谷歌采用的是url编码: 所以我们在设置响应头的时候Content-Type getS ...

  3. java下载文件名乱码的解决方法

    java下载文件名乱码的解决方法 参考文章: (1)java下载文件名乱码的解决方法 (2)https://www.cnblogs.com/liyabin/p/7891073.html 备忘一下.

  4. 火狐浏览器下载文件名乱码

    ##火狐浏览器下载文件名乱码 response.setHeader("Content-Disposition","attachment;filename*=utf-8'z ...

  5. IE浏览器下载文件名乱码

    解决IE浏览器下载文件名乱码额问题 //下载的文件名为fileNameString fileName = "登录登出日志统计" + DateUtils.yyyyMMddHHmmss ...

  6. java web 下载文件名乱码

    Web开发下载文件功能(代码如下),文件名如果带有中文,经常会出现乱码现象,需要进行编码. String fileName = "测试文件.doc"; try {HttpServl ...

  7. 解决wget下载文件名乱码的一些方法

    在下载用apache或者nginx做的索引目录时,遇到文件名乱码问题.搜索了不少资料,尝试了好几种方案,大家可以结合使用. 一般情况下加上–restrict-file-names=nocontrol参 ...

  8. 开发者日记1-文件下载文件名乱码(所有语言通用下载设置)

    源头 作为一个原Java开发者,在之前所开发的项目中,做文件下载我们有一个方法,就是获取User-agent然后去判断这个user-agent的请求头去依次根据浏览器去转换我们返回时的文件名称 文件下 ...

  9. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...

    中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. $file_name = urlencode($_RE ...

  10. Java解决下载--文件名乱码

    最近常有人问到下载文件文件名出现乱码问题,今天统一给出解决方案如下 通常都会通过URLEncoder转码的方式来解决,关键代码如下: response.setContentType( "ap ...

最新文章

  1. Python 命令pip install pygame安装报错
  2. SwiftUI之深入解析如何定制视图的动画和转场
  3. SAP UI5 应用开发教程之一:Hello World
  4. element form自定义校验_SpringBoot分组校验及自定义校验注解
  5. 建模元件有哪些在MapleSim中
  6. 【测试】用例设计思路-输入框类型功能
  7. 从0到1设计一个秒杀系统
  8. SQLite与Sql Server的语法差异(转载)
  9. OpenCV-膨胀cv::dilate
  10. 使用Kmeans聚类分析对复杂的数据进行分类
  11. 每天一道算法题:无重复字符的最长子串
  12. 熵权法求权重的Matlab实现
  13. 关于计算机算法学习路线(持续更新)
  14. Unity+JetBrainsRider2020+EmmyLua调试Lua(XLua)
  15. springboot 微信支付接口
  16. FireFox火狐浏览器配置页面about:config参数说明
  17. 租房软件需要的是简单易用
  18. 分类任务中的类别不平衡问题
  19. Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
  20. 开源了个人开发的一个微信小程序,提供共享场景服务,支持图片和小视频

热门文章

  1. WIX插件安装包的生成(三) 批量导入文件
  2. jQuery attr()获取属性和设置属性的方法
  3. 探索AI助手ChatGPT实际应用场景
  4. blender_mmd_tools_extra 插件介绍
  5. dg打开软件Android,DG 文件扩展名: 它是什么以及如何打开它?
  6. 集成运放的主要技术指标
  7. oracle ora-03114
  8. Elasticsearch如何创建索引,添加,删除,更新文档
  9. gcrobustvar:基于VAR的稳健性Granger因果检验
  10. VMware 虚拟机安装Linux(Ubuntu)系统教程