ASP.NET文件下载避免使用WriteFile方法
2012-03-23 15:49
926 查看
在你的Page_Load中添加这样的代码:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Page.Response.Clear();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if (!success)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write("下载文件出错!");
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Page.Response.End();
文件下载函数代码为:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BinaryReader br = new BinaryReader(myFile);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Accept-Ranges", "bytes");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.Buffer = false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
long fileLength = myFile.Length;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
long startBytes = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
double pack = 10240; //10K bytes
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//int sleep = 200; //每秒5次 即5*10K bytes每秒
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (_Request.Headers["Range"] != null)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.StatusCode = 206;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
string[] range = _Request.Headers["Range"].Split(new char[]
![](http://www.cnblogs.com/Images/dot.gif)
{'=', '-'});
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
startBytes = Convert.ToInt64(range[1]);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (startBytes != 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Connection", "Keep-Alive");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.ContentType = "application/octet-stream";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for (int i = 0; i < maxCount; i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (_Response.IsClientConnected)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Thread.Sleep(sleep);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i=maxCount;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
finally
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
br.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
myFile.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口.
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Page.Response.Clear();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if (!success)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write("下载文件出错!");
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Page.Response.End();
文件下载函数代码为:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BinaryReader br = new BinaryReader(myFile);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Accept-Ranges", "bytes");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.Buffer = false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
long fileLength = myFile.Length;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
long startBytes = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
double pack = 10240; //10K bytes
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//int sleep = 200; //每秒5次 即5*10K bytes每秒
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (_Request.Headers["Range"] != null)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.StatusCode = 206;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
string[] range = _Request.Headers["Range"].Split(new char[]
![](http://www.cnblogs.com/Images/dot.gif)
{'=', '-'});
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
startBytes = Convert.ToInt64(range[1]);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (startBytes != 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Connection", "Keep-Alive");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.ContentType = "application/octet-stream";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for (int i = 0; i < maxCount; i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (_Response.IsClientConnected)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Thread.Sleep(sleep);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i=maxCount;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
finally
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
br.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
myFile.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口.
相关文章推荐
- ASP.NET 使用Response.WriteFile方法下载文件
- ASP.NET中使用C#文件下载四方法
- ASP.NET使用Response.WriteFile(filename);实现 文件下载
- ASP.NET上传下载文件,使用TransmitFile方法实现下载。
- ASP.NET 使用js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)
- ASP.NET Web.config配置文件的基本使用方法
- asp.net .ashx,cs文件使用server.mappath解决方法
- asp.net文件上传用到html的file控件,在使用母版页Master,更改form的Enctype=multipart/form-data的方法
- C# asp.net中四种文件下载方法
- asp.net C#实现下载文件的六种方法实例
- ASP.NET中文件上传下载方法集合
- asp.net .ashx,cs文件使用server.mappath解决方法
- ASP.NET Global.asax 文件使用方法 - .net
- Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)
- asp.net实现服务器文件下载到本地的方法
- asp.net C#实现下载文件的六种方法实例
- ASP.NET中常用的文件上传下载方法
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- asp.net下载文件的常用方法大全