int id =1Convert.ToInt32(Page.Request.QueryString["id"]);
//Response.Write("下载表示id"+id);
string sql = "select * from t_upload where id='" + id + "'"; //流方式下载
DataSet ds = DBHepler.GetDataSet(sql, CommandType.Text, null);
string upName = ds.Tables[0].Rows[0]["upName"].ToString();
string filePaht = ds.Tables[0].Rows[0]["upPath"].ToString();
FileStream fs = new FileStream(filePaht,FileMode.Open); //创建一个文件流,将下载文件路径
byte[] bytes=new byte[(int)fs.Length]; //创建一个字节数组,可以容下下载文件
fs.Read(bytes,0,bytes.Length); //文件流读取字节数组,
fs.Close(); //文件流关闭
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(upName,System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush(); //
Response.End(); //
Response.ContentType = "application/x-zip-compressed"; //Transmitfile下载来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlPathEncode(upName));
Response.TransmitFile(filePaht);
Response.Flush();
Response.End();
FileInfo fileInfo = new FileInfo(filePaht); //WriteFile分块下载
if(fileInfo.Exists==true){
const long chunkSize = 102400; //每次读取文件 100k,以减轻服务器的压力
byte[] buffer=new byte[chunkSize];
Response.Clear(); //响应,清除缓存
FileStream iStream = File.OpenRead(filePaht);
long datalengthSize = iStream.Length; //下载文件的大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(upName));
while(datalengthSize>0&&Response.IsClientConnected){
int lengRead = iStream.Read(buffer,0,Convert.ToInt32(chunkSize));//读取的大小
Response.OutputStream.Write(buffer,0,lengRead);
Response.Flush();
datalengthSize = datalengthSize - lengRead;
}
Response.Close();
}