牢骚:今天又是一个不太平的日子,打开任务表一看里面有一堆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. CSS<img>与<a href>字体同行显示方法与对齐

    1.一开始使用php的volist标签conding了这样一段代码: <volist name="result['list']" id="temp"> ...

  2. Django 部署到Nginx

    在网上搜了很多篇Django+uwsgi+Nginx的部署文章,忙了一下午头昏脑胀,最终完成了部署.部署文章流程讲解都很好,但在细节上或许缺乏一些注意力,导致我多篇文章来回切换在字里行间寻找蛛丝马迹. ...

  3. GitHub For Beginners: Don’t Get Scared, Get Started

    It's 2013, and there's no way around it: you need to learn how to use GitHub.2 Why? Because it's a s ...

  4. Java中的null值总结

    自我总结,有什么不对或不到位的地方,请指出,感激不尽! 目的:熟练掌握java中null值出现的情况,避免NullPointerException 代码环境准备:需要引入junit;将代码packag ...

  5. C#中的out参数/ref参数/params可变参数

    out参数: out关键字 通过引用来传递参数,在定义方法和调用方法的时候都必须使用out关键字 简单来讲out可以用来返回多个参数类型. static void Main(string[] args ...

  6. Apache优化配置:修改最大并发连接数

    此文摘自: http://www.365mini.com/page/apache-concurrency-configuration.htm Apache查看连接数和限制当前的连接数 : http:/ ...

  7. 洛谷 [P1129] [ZJOI2007] 矩阵游戏

    这竟然是一道二分图 乍一看,可能是用搜索做,但是这个数据范围,一定会T. 我们观察发现,无论怎样变换,同一行的一定在同一行,同一列的一定还在同一列.所以说,一行只能配一列.这样,我们的目标就是寻找是否 ...

  8. 51NOD 1220 约数之和 [杜教筛]

    1220 约数之和 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_1(ij)​\) \[ \sigma_0(ij) = \sum_{x\mid i}\sum_{y\mi ...

  9. 【转】TCP/IP和SOCKET的区别

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  10. vue项目基本流程

    一.做项目基本流程: 1.规划组件结构 Nav.vue Header.vue Home.vue..... 2.编写对应路由 vue-router 3.具体些每个组件功能 一些公共的文件jquery,j ...