C#导出Excel,服务端已经生成Excel文件,不下载。

我就叫Vieso 2013-05-28 03:33:57
本人做了个C#导出Excel的功能,
架构师用的EasyUI,Jq去访问的后台,后台已经生成所需的Excel,但是页面就是不提示下载,哪位大侠知道,不妨指点一二。
以下是输出的代码:

System.Web.UI.Page page = new System.Web.UI.Page();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.ContentEncoding = Encoding.Default;
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + page.Server.UrlEncode(fileInfo.Name));
//HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileInfo.Name);
HttpContext.Current.Response.WriteFile(fileInfo.FullName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();


fileInfo.FullName是文件在服务器上的物理路径,已经确认路径是对的了。
后台的Excel也已经生成。
其实这也能算是文件不能下载的问题。
请各位大侠多指教
...全文
407 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
changshenglugu 2015-03-13
  • 打赏
  • 举报
回复
引用 15 楼 abcqianzhongshu 的回复:
如何解决的,新弹出的页面
解决方法是:把‘target’属性设置为‘_self’或者是‘_parent’,还有别的方法。但不知道怎么内存中直接下载
钱野人 2015-02-11
  • 打赏
  • 举报
回复
如何解决的,新弹出的页面
feng645194167 2014-08-15
  • 打赏
  • 举报
回复
引用 11 楼 heidaichongzi 的回复:
感谢8楼,哎,低级错误。
虽然可以,但是会弹出一个页面啊
点点星星 2014-01-03
  • 打赏
  • 举报
回复
LZ,你这个是怎么解决的 咱俩的问题一样 能给我说说怎么解决的吗?
MINGMING_0302 2013-11-07
  • 打赏
  • 举报
回复
LZ,你的源码方便给我参考下么~ 不胜感激~
我就叫Vieso 2013-05-30
  • 打赏
  • 举报
回复
感谢8楼,哎,低级错误。
shawn_yang 2013-05-29
  • 打赏
  • 举报
回复
其实可以用变通方式,比如打包成压缩文件,rar,zip,然后给用户下载即可
火星大能猫 2013-05-29
  • 打赏
  • 举报
回复
同意楼上的观点
游戏人间 2013-05-29
  • 打赏
  • 举报
回复
哦,你确定这样能下载文件? 反正我是没成功过,你把这段改成window.open("../Ashx/ExportExcel.ashx?excelType=user");试试。
我就叫Vieso 2013-05-28
  • 打赏
  • 举报
回复
引用 6 楼 wonderfuly 的回复:
代码没问题,关键是jq你是怎么来下载文件的。
JQ就是ajax去通知了以下ashx 以下是代码:
$.ajax({
            url: "../Ashx/ExportExcel.ashx?excelType=user",
            cache: false,
            error: function(msg) {
                $.messager.alert("提示", "系统发生异常,请联系相关人员。");
                return;
            }
        });
应该没问题吧。。。
游戏人间 2013-05-28
  • 打赏
  • 举报
回复
代码没问题,关键是jq你是怎么来下载文件的。
TobeNotTobe 2013-05-28
  • 打赏
  • 举报
回复
iis下生成excel文件,会有各种各样麻烦,首先是后台进程不能释放。如果是必须生成的,可以写个程序提前生成好(计划任务,守护进程方式都可以),用户点连接时直接指向该文件,就可下载了。
我就叫Vieso 2013-05-28
  • 打赏
  • 举报
回复
引用 3 楼 lr21shiji 的回复:
用文件输出的方式应该可以
你是说流输出吧,我试过了,不行没反应。 以下是代码:

            //以字符流的形式下载文件 
            FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open);
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            HttpContext.Current.Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开 
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileInfo.Name, System.Text.Encoding.UTF8));
            HttpContext.Current.Response.BinaryWrite(bytes);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();
lr21shiji 2013-05-28
  • 打赏
  • 举报
回复
用文件输出的方式应该可以
by_封爱 版主 2013-05-28
  • 打赏
  • 举报
回复
建议百度搜索下myxls的 很方便 自己封装下 直接都可以下载了. 你这样方式下载 很可能 在客户端弹出迅雷 下载到本地是一个aspx 所以 ..
ustbwuyi 2013-05-28
  • 打赏
  • 举报
回复
你把Excel里面的内容绑定到GridView显示在页面上不就OK了? 肯定不能让用户直接访问Excel.

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧