牢骚:今天又是一个不太平的日子,打开任务表一看里面有一堆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. ios GCD将异步转换为同步

    在开发中有时需要等网络请求完成之后拿到数据做一些操作,而且有时是同时好几个网络请求同时发起.这时会有对异步操作进行更进一步控制的场景,不单网络请求,有时一些其他本地文件,多张图片处理等可能都会遇到这种 ...

  2. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

  3. Notepad++运行Java

    插件NppExec使用 首先要让Notepad++编译和运行Java,前提是电脑里已经配置好了Java的环境 1,安装插件NppExec:解压出来提取NppExec.dll文件放在Notepad++安 ...

  4. oracle光标的使用

    以下plsql程序用的scott用户的dept,emp表. 1.光标的使用: --查询并打印员工的姓名名和薪水 /* 光标属性: %found %notfound */ set serveroutpu ...

  5. 前端自动化测试神器-Katalon进阶用法

    前言 上一篇介绍了Katalon的基础用法,本篇继续介绍一些进阶的用法. Keyword 和 Method Call Statement Keyword Keyword就是自定义方法,该方法在当前项目 ...

  6. PHP可以通过类名调用非静态方法

    今日有兄弟遇上一个问题,就是可以通过class名称直接调用该类中的函数,我测试了一下,确实可以,概念中是只有静态方法才可以这样调用的,现在 被刷新了,于是我在方法中加入一行$this相关的操作,再运行 ...

  7. [eslint-plugin-vue] [vue/no-unused-vars] 'scope' is defined but never used.

    前言 今天在做项目的时候Visual Studio Code报了一个错 这个错的意思是声明了scope却没有使用它,这是vue的eslink插件检测的. 我想这个scope的属性不是自己的吗,咋是我声 ...

  8. [Cpp] 面向对象程序设计 C++

    初始化列表(包括成员对象初始化) 初始化列表 ( 推荐 ) :  可以初始化任何类型的数据, 不管是不是普通类型还是对象,都建议用.  不再需要在构造器中赋值了, 而且初始化列表比构造函数要早执行.  ...

  9. JS中的内置对象简介与简单的属性方法

    JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...

  10. 详解CSS display:inline-block的应用

    阅读目录 基础知识 inline-block的问题 inline-block的应用 总结 本文详细描述了display:inline-block的基础知识,产生的问题和解决方法以及其常见的应用场景,加 ...