下载Excel文件

aspx:
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " test.aspx.cs "  Inherits = " test "   %>
test.aspx.cs:
protected   void  Page_Load( object  sender, EventArgs e)
{
    
string  fileName  =   " SalesOrder_090730120254.xls " ;
    
string  path  =   " D:\\ "   +  fileName;
    Response.Cache.SetCacheability(HttpCacheability.Private);
    Response.ContentType 
=   " application/vnd.ms-excel " ;
    Response.AddHeader(
" Content-Disposition " , " attachment;filename=\ "" +fileName+ " \ "" );
    Response.TransmitFile(path);
}

问题汇总:
1. IE6缓存问题
    上面代码如果将缓存设置改为HttpCacheability.NoCache,IE7、FF可以下载,但IE6会报错“Internet Explorer could not download "file name" from "server url".”,同在IE6的机器上,使用IE内核的360浏览器可以下载
    原因是缓存设置为NoCache或者立即过期时,IE6缓存清除的太快,在弹出另存为的下载对话框后立即将文件删除掉了,用户点击保存按钮时文件已经不存在
    某些情况下,将Response.Buffer设置为true也可能导致这个错误
    直接将链接地址指向服务器端文件的下载方式,IIS使用的帐号(匿名帐号或集成认证帐号)没有访问下载文件的NT权限时也可能报无法下载的错误,这里提供的下载方式不存在这个问题
    在IE6的机器上用Fiddler监控360浏览器下载情况,发现360浏览器会多出一次返回文件的请求,问题清楚了,360在保存文件时发现缓存中文件已经不存在,重新从服务器请求文件。将360设置为使用IE下载工具同样无法下载
2. 文件名的问题
    content-disposition中给出的文件名包含中文时,需要使用Server.UrlEncode(fileName)编码文件名,否则客户端看到的是乱码。但使用UrlEncode编码后,IE7正确显示文件名,FF不能正确解码出中文文件名
    IE6总是显示aspx页面的名字,上面例子IE6的下载文件名是test.xls,没有找到解决方法
    因此文件名最好用字母、数字命名
3. 执行下载页面后没有任何反映
    一般可能是被杀毒、防火墙软件拦截,关闭杀毒软件再试(有些杀毒软件关闭网页监控之类的功能即可)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值