计算机教程

当前位置:3522.com > 计算机教程 > C# Response 下载

C# Response 下载

来源:http://www.4sports-uk.com 作者:3522.com 时间:2019-05-13 05:47

//TransmitFile实现下载

``protected void Button1_Click(``object sender, EventArgs e)

``{

``/*

``微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite

``下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。

``代码如下:

``*/ 

 

``Response.ContentType = ``"application/x-zip-compressed"``;

``string FileName = ``"test.doc"``;

``//使用UTF-8对文件名进行编码

``Response.AppendHeader(``"Content-Disposition"``, ``"attachment;filename=""  HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)  ``"""``);

``Response.ContentType = ``"application/octet-stream"``;

``Response.AddHeader(``"Content-Disposition"``, ``"attachment;filename="  FileName);

``string filename = Server.MapPath(``"../ReportTemplate/test.doc"``);

``Response.TransmitFile(filename);

``}

 

``//WriteFile实现下载

``protected void Button2_Click(``object sender, EventArgs e)

``{

``/*

``using System.IO;

``*/ 

``string fileName = ``"test.doc"``;``//客户端保存的文件名

``string filePath = Server.MapPath(``"../ReportTemplate/test.doc"``);``//路径

``FileInfo fileInfo = ``new FileInfo(filePath);

``Response.Clear();

``Response.ClearContent();

``Response.ClearHeaders();

``Response.AddHeader(``"Content-Disposition"``, ``"attachment;filename=""  HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)  ``"""``);

``Response.AddHeader(``"Content-Length"``, fileInfo.Length.ToString());

``Response.AddHeader(``"Content-Transfer-Encoding"``, ``"binary"``);

``Response.ContentType = ``"application/octet-stream"``;

``Response.WriteFile(fileInfo.FullName);

``Response.Flush();

``Response.End();

``}

 

``//WriteFile分块下载

``protected void Button3_Click(``object sender, EventArgs e)

``{

``string fileName = ``"test.doc"``;``//客户端保存的文件名

``string filePath = Server.MapPath(``"../ReportTemplate/test.doc"``);``//路径

 

 

``System.IO.FileInfo fileInfo = ``new System.IO.FileInfo(filePath);

 

 

``if (fileInfo.Exists == ``true``)

``{

``const long ChunkSize = 102400; ``//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力

``byte``[] buffer = ``new byte``[ChunkSize];

 

 

``Response.Clear();

``System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);

``long dataLengthToRead = iStream.Length; ``//获取下载的文件总大小

``Response.ContentType = ``"application/octet-stream"``;

``Response.AddHeader(``"Content-Disposition"``,

``"attachment; filename="  HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));

``while (dataLengthToRead > 0 && Response.IsClientConnected)

``{

``int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize)); ``//读取的大小

``Response.OutputStream.Write(buffer, 0, lengthRead);

``Response.Flush();

``dataLengthToRead = dataLengthToRead - lengthRead;

``}

``Response.Close();

``}

``}

 

``//流方式下载

``protected void3522.com, Button4_Click(``object sender, EventArgs e)

``{

``string fileName = ``"test.doc"``;``//客户端保存的文件名

``string filePath = Server.MapPath(``"../ReportTemplate/test.doc"``);``//路径

 

``//以字符流的形式下载文件

``FileStream fs = ``new FileStream(filePath, 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(fileName, System.Text.Encoding.UTF8));

``Response.BinaryWrite(bytes);

``Response.Flush();

``Response.End();

``}

}

本文由3522.com发布于计算机教程,转载请注明出处:C# Response 下载

关键词: 3522.com