ASP.NET提供文件下载函数
// 输入参数 _Request: Page.Request对象, _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数
// 返回是否成功
public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;
int pack = 10240; //10K bytes
//int sleep = 200; //每秒5次 即5*10K bytes每秒
int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] {@#=@#, @#-@#});
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i=maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}
调用例
Page.Response.Clear();
bool success = ResponseFile(Page.Request, Page.Response, "filename", @"C:\download.date", 1024000);
if(!success)
Response.Write("下载文件出错!");
Page.Response.End();
下一篇:[ASP.NET]制作一个简单的多页Tab功能 >>
相关文章:
- · 探讨一下分布式结构在网络应用中的种种好处
- · ASP.NET 2.0中隐藏listbox的某一项
- · ASP.NET下的Page Controller以及Template Method
- · ASP.NET 2.0中隐藏listbox的某一项
- · NET中打印包含有格式的 RichTextBox 的内容
- · 创建ASP.NET WEB自定义控件——例程1
- · 创建ASP.NET WEB自定义控件——例程1
- · VB6如何让程序只能启动一个实例
- · VB6如何让程序只能启动一个实例
- · 在ASP.NET中动态修改文件下载
- · 在asp.net中使用SQLSERVER的高级用法
- · ASP.NET心得笔记
- · [ASP.NET]如何在客户端调用服务端代码
- · ASP.NET POST方式提交数据
- · ASP.NET GET 方式提交数据!
- · ASP.NET的include的用法
- · asp。net关于三层连接数据库
- · .NET中的设计模式四:命令模式
- · VS.NET安装指南(To菜鸟)
- · .net中实现运行时从字符串动态创建对象
- · [ASP.NET]按键跳转以及按Enter以不同参数提交,及其他感应事件
- · [ASP.NET]一个实用的弹出窗口函数
- · [ASP.NET]实现在执行完服务端代码后弹出提醒对话框
- · 在 ASP.NET 中实现会话状态的基础
- · 如何解决ASP.NET中中文不能正常显示问题?
- · 把aspx文件编译成DLL文件
- · Asp.net连Access时:操作必须使用一个可更新的查询
- · ASP.NET中的应用程序配置
- · 基于ASP.NET的网页复用方法
- · 在ASP.NET访问Excel文件
- · Asp.net中DataGrid控件的自定义分页
- · 将ASP.NET Control转换为String
- · 在ASP.NET中杀死进程
- · 在ASP.NET中将数据直接输出成Excel内容
- · 在ASP.NET里轻松实现缩略图
- · 用ASP.NET加密Cookie数据
- · 在ASP.NET中实现多文件上传
- · 在ASP.NET中动态创建柱状图和饼图
