流下载用来处理大文件的http下载很有效,可以节省服务器端的内存,也比简单的将http重定向到资源绝对路径要安全。下面贴段代码与大家分享:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string path = Server.MapPath("~/BigFile");
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachement;filename=tmp");
using (var stream = File.Open(path, FileMode.Open))
{
var length = (new FileInfo(path)).Length;
var readedSize = 0;
var tmp = 0;
while (length - readedSize > 0)//还有数据没读完
{
if (Response.IsClientConnected)
{
tmp = stream.Read(buffer, 0, bufferSize);
readedSize += tmp;
Response.OutputStream.Write(buffer, 0, tmp);
}
else
{
}
}
}
}
}