前往顾页
以后地位: 主页 > 收集编程 > .Net实例教程 >

操纵ASP.NET实现 下载文件 实例代码

时候:2013-04-25 11:17来源:知行网www.zhixing123.cn 编辑:麦田守望者

若何经由过程ASP.NET来下载文件,这个问题我们常常碰到,把常常利用的体例总结到一路,学习学习。当我们要让用户下载一个文件,最简朴的体例是经由过程Response.Redirect指令:

Response.Redirect("test.doc")


您可以把下面这行指令放在Button的Click事件当中,当用户点击按钮以后,网页就会被转址到该word档,造成下载的结果。

但是如许的下载有几个问题:

1、无法下载不存在的文件:比方,我们如果想把法度静态(临时)产生的笔墨,当作一个文件下载的时候(也就是该文件其实本来其实不是真的存在,而是静态产生的),就无法下载。

2、无法下载存储于数据库中的文件:这是近似的问题,该文件并没有真的存在,只是被存放在数据库中的某个地位(某条记录中的某个栏位)的时候,就无法下载。

3、无法下载不存在于Web文件夹中的文件:文件确切存在,但该文件夹其实不是可以分享出来的Web文件夹,比方,该文件的地位在C:\winnt,您总不会想要把该文件夹当作Web文件夹吧?这时候辰,因为您无法利用Redirect指向该地位,所以无法下载。

4、下载文件后,原本的页面将会消逝。

典范的状况是,我们要让用户下载一个.txt文件或是.csv格局的Excel文件,但是...

1、这个文件多是经由过程ASP.NET法度静态产生的,而不是确切存在于Server端的文件;

2、或是它固然存在于伺服器端的某个实体地位,但我们其实不想透露这个地位(如果这个地位公开,很可能没有权限的用户也能够在网址栏上输入URL直接获得!!!)

3、或是这个地位其实不在网站假造途径地点的文件夹中。(比方C:\Windows\System32...)


//TransmitFile实现下载

protected void Button1_Click(object sender, EventArgs e)

{

/*

微软为Response工具供应了一个新的体例TransmitFile来处理利用Response.BinaryWrite

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

代码以下:

*/

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

Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");

string filename = Server.MapPath("DownLoad/z.zip");

Response.TransmitFile(filename);

}

//WriteFile实现下载

protected void Button2_Click(object sender, EventArgs e)

{

/*

using System.IO;

*/

string fileName = "asd.txt";//客户端保存的文件名

string filePath = Server.MapPath("DownLoad/aaa.txt");//途径

FileInfo fileInfo = new FileInfo(filePath);

Response.Clear();

Response.ClearContent();

Response.ClearHeaders();

Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);

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

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

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

Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

Response.WriteFile(fileInfo.FullName);

Response.Flush();

Response.End();

}

//WriteFile分块下载

protected void Button3_Click(object sender, EventArgs e)

{

string fileName = "aaa.txt";//客户端保存的文件名

string filePath = Server.MapPath("DownLoad/aaa.txt");//途径

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));

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 void Button4_Click(object sender, EventArgs e)

{

string fileName = "aaa.txt";//客户端保存的文件名

string filePath = Server.MapPath("DownLoad/aaa.txt");//途径

//以字符流的情势下载文件

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();

}

//----------------------------------------------------------


public void DownloadFile( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FileBody )

{

  WebForm.Response.ClearHeaders();

  WebForm.Response.Clear();

  WebForm.Response.Expires = 0;

  WebForm.Response.Buffer = true;

  WebForm.Response.AddHeader("Accept-Language", "zh-tw");

  //'文件称呼

  WebForm.Response.AddHeader("content-disposition", "attachment; filename='"+System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8)+"'");

  WebForm.Response.ContentType = "Application/octet-stream";

  //'文件内容

  WebForm.Response.Write(FileBody);//-----------

WebForm.Response.End();

}

//下面这段代码是下载一个静态产生的文本文件,若这个文件已存在于办事器端的实体途径,则可以经由过程下面的函数:

public void DownloadFileByFilePath( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FilePath )

{

  WebForm.Response.ClearHeaders();

  WebForm.Response.Clear();

  WebForm.Response.Expires = 0;

WebForm.Response.Buffer = true;

  WebForm.Response.AddHeader("Accept-Language", "zh-tw");

  //文件称呼

  WebForm.Response.AddHeader("content-disposition", "attachment; filename='" + System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) +"'" );

  WebForm.Response.ContentType = "Application/octet-stream";

  //文件内容

  WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath));//---------

  WebForm.Response.End();

}

------分开线----------------------------
标签(Tag):C# C#实例教程 c#根本教程 C#源代码 c#技能
------分开线----------------------------
保举内容
猜你感兴趣