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