牢骚:今天又是一个不太平的日子,打开任务表一看里面有一堆bug,其中有一个就是今天要说的这个关于商品导出的问题,本功能是临时授命接一个任务,本来呢这个导出功能在系统各大模块已经都很成熟了,但是总有一个问题:导出来的excel表格不是真正的.xls格式的文件所以呢就造成了一个后果,那就是将导出来的列表修改内容或者不修改保存后再导入到系统里面就会出现格式不正确的报错现象,原因很简单:导出时通过接口查询出所需要的数据模型,然后将这个model循环遍历到html页面里,最终通过System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition","attachent;fileName=" + "商品批量编辑列表.xls"); System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
通过这样的操作可以将列表导出到excel里面,问题来了,其实我们导出的是什么格式?并不是真正的excel格式,而是普通的HTML格式,只不过excel支持html的格式的数据而已,所以在导入的时候Npoi插件调用解析表格的方法时,就会报错。好吧!!!!说了这么多也没有说到今天的重点,正因为有这个问题所以本人就对这个问题进行了优化,优化的方法就是使用NPOI创建工作簿,再创建工作表,再对表格进行修改样式(主要是样式做起来实在是太让人头疼了),再把数据填写到表里面这样再将数据导出来,当然这样操作就会解决之前说的问题,接着导入也会导入到系统里面,原因很简单因为我导出的是真正的表格嘛,所以也自然解析会通过,现在的问题是,用火狐浏览器导出时出现了问题,导出的文件名真是让人头大,显示的竟然是加密后的乱码,让处于兴奋状态的我立刻就nie了。算了这就是乱码浏览器不兼容的问题,顿时就觉得应该好好整顿这个浏览器市场了,不要在这么干下去了对大伙都不好,算了我说的不算。好下面就将解决代码跟大家分享一下吧,这个代码不仅解决了上述问题而且还有可能治愈精神疾病,因为它把我从崩溃的边缘拉了回来,废话不多说看真经:
string sFileName =  "XXXXXX.xls";      
if (baseContext.Request.ServerVariables["http_user_agent"].ToString().IndexOf("Firefox") != -1)
{
    sFileName = "=?UTF-8?B?" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sFileName)) + "?=";        
 }
  else
 {
   sFileName = System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8);
            sFileName = sFileName.Replace("+", "%20");
 }
 baseContext.Response.AddHeader("Content-Disposition", "attachment;filename=" + sFileName);
 baseContext.Response.AddHeader("Content-Length", ms.Length.ToString());
 baseContext.Response.AddHeader("Content-Transfer-Encoding", "binary");
 baseContext.Response.ContentType = "application/octet-stream;charset=utf-8";
 baseContext.Response.ContentEncoding = System.Text.Encoding.UTF8;  
 baseContext.Response.BinaryWrite(ms.ToArray());
Ps: 当代码复用时注意根据实际情况添加。或多或少的进行改进。

火狐浏览器导出EXCEL 表格,文件名乱码问题的更多相关文章

  1. 平板电脑与火狐浏览器下载excel中文文件名乱码

    fileName = new String(fileName.getBytes("utf-8"), "iso8859-1");//兼容火狐.ie.平板 resp ...

  2. 原生JavaScript 导出excel表格(兼容ie和其他主流浏览器)

    因同事的需求是想前端导出excel表格,网上找了一些demo,自己修改了一下,可能以后会用到,记录下来吧,兼容ie和一些主流浏览器,ie可能会报错,原因参考 这里,edge 浏览器还没有办法导出,正在 ...

  3. PHP导入导出excel表格图片(转)

    写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wp ...

  4. php header函数导出excel表格

    推荐一个除了用PHPExcel导出表格之外的另外一种比较简单不需要引入类文件的表格导入方法——header()导出excel表格. 导出表格的步骤封装成了方法,以便于重复使用,代码如下: /** * ...

  5. PHP导入导出excel表格图片的代码和方法大全

    基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...

  6. Vue中导出Excel表格方法

    本文记录一下在Vue中实现导出Excel表格的做法.参考度娘上各篇博客,最后实现功能 Excel表格,我的后端返回的是数据流,然后文件名是放进了content-disposition中,前端进行获取. ...

  7. 360浏览器导出Excel闪退BUG

    最近这半个月在疯狂的修改各种BUG,所以比较少更新博客. 现在谈谈这个360浏览器导出Excel的BUG的解决方法. 该BUG常出现在win7系统与xp系统导出Excel的瞬间关闭导出弹窗. 目前互联 ...

  8. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  9. Spring Boot 导出Excel表格

    Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...

随机推荐

  1. C# String StringBuilder 区别

    这篇博客,纯参考.主要为了自己也复习一遍,过一下其中的原理. string aTest = "abc";//分配固定的内存大小 aTest += "ddd"; ...

  2. centos7+ansible自动化工具使用

    一.基础介绍 ========================================================================================== 1. ...

  3. 关于fprint()和fwrite()

    int num = 12345; 将12345作为二进制数存储到num中 1. fprintf(fp,"%d",num); //把字符'1','2','3','4','5'的二进制 ...

  4. node-glob的*匹配

    目录结构 src/js/libs/app.js src/js/index.js 测试脚本 var glob = require('glob') glob('', {}, function (err, ...

  5. es故障节点恢复后加入集群导致删除索引重新出现

    es的每个shard下的文件都可以看做一个完整的lucene文件,shard数据目录下的segment文件包含了索引的分片数量,副本数量.es shard可以恢复,就是因为每个shard都包含了一份数 ...

  6. Linux C 一个简单的线程池程序设计

    最近在学习linux下的编程,刚开始接触感觉有点复杂,今天把线程里比较重要的线程池程序重新理解梳理一下. 实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任 ...

  7. SpringMVC之Http标准的头部信息

  8. flex 布局 input 宽度不自适应

    flex 布局 input 宽度不自适应 解决方法: 给 input 加上min-height 解决!

  9. 读书共享 Primer Plus C-part 5

    第五章 运算符.表达式和语句 关于+- 的一元运算符和二元运算符的区别 a++:a先创建自身的一个副本,然后a自增1,最后返回副本的值 a+=1: 事实上相当于++a a=a+1: 虽然有点雷同于a+ ...

  10. Redis Sentinel安装与部署,实现redis的高可用

    前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服务,只要用于生产,就需要满足高可用:此文针对的是redis的高可用. 接下来会有系列文章,该系列是对spring-session实现分 ...