Richie

Sometimes at night when I look up at the stars, and see the whole sky just laid out there, don't you think I ain't remembering it all. I still got dreams like anybody else, and ever so often, I am thinking about how things might of been. And then, all of a sudden, I'm forty, fifty, sixty years old, you know?

下载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. 执行下载页面后没有任何反映
    一般可能是被杀毒、防火墙软件拦截,关闭杀毒软件再试(有些杀毒软件关闭网页监控之类的功能即可)

posted on 2009-07-30 20:32  riccc  阅读(1410)  评论(0编辑  收藏  举报

导航