利用ASP.Net怎么对大文件进行下载

介绍

利用ASP.Net怎么对大文件进行下载?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃。可以参考如下代码来避免这个问题。

关于此代码的几点说明:

1。将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据。

2。根据下载的文件类型来指定反应。ContentType。(参考OSChina的这个网址可以找到大部分文件类型的对照表:http://tool.oschina.net/commons)

3。在每次写完反应时记得调用Response.Flush ()

4。在循环下载的过程中使用的反应。IsClientConnected这个判断可以帮助程序尽早发现连接是否正常。若不正常,可以及早的放弃下载,以释放所占用的服务器资源。

5。在下载结束后,需要调用Response.End()来保证当前线程可以在最后被终止掉。

代码如下:


使用系统;

名称空间WebApplication1
{
,,,公共部分类DownloadFile: System.Web.UI.Page
,,,{
,,,,,,,保护无效employee(对象发送方,EventArgs e)
,,,,,,,{
,,,,,,,,,,,先。流iStream=零;

,,,,,,,,,,,//缓冲区读10 k字节块:
,,,,,,,,,,,byte[]新字节缓冲区=[10000],

,,,,,,,,,,,//长度的文件:
,,,,,,,,,,,int长度;

,,,,,,,,,,,//读取字节总数。
,,,,,,,,,,,长dataToRead;

,,,,,,,,,,,//识别文件下载包括路径。
,,,,,,,,,,,字符串filepath=Server.MapPath(“/? +“。/文件/TextFile1.txt";

,,,,,,,,,,,//确定文件名。
,,,,,,,,,,,字符串文件名=System.IO.Path.GetFileName (filepath);

,,,,,,,,,,,试着
,,,,,,,,,,,{
,,,,,,,,,,,,,,,//打开文件。
,,,,,,,,,,,,,,,iStream=新先。文件流(filepath System.IO.FileMode.Open,
,,,,,,,,,,,,,,,,,,,,,,,,,,,System.IO.FileAccess。阅读,System.IO.FileShare.Read);

,,,,,,,,,,,,,,,//读取字节总数。
,,,,,,,,,,,,,,,dataToRead=iStream.Length;

,,,,,,,,,,,,,,,Response.Clear ();
,,,,,,,,,,,,,,,Response.ClearHeaders ();
,,,,,,,,,,,,,,,Response.ClearContent ();
,,,,,,,,,,,,,,,响应。ContentType=拔谋?plain";//设置文件类型
,,,,,,,,,,,,,,,Response.AddHeader (“Content-Length" dataToRead.ToString ());
,,,,,,,,,,,,,,,Response.AddHeader (“Content-Disposition"“依恋;文件名=?+文件名);

,,,,,,,,,,,,,,,//读取字节。
,,,,,,,,,,,,,,,而(dataToRead比;0)
,,,,,,,,,,,,,,,{
,,,,,,,,,,,,,,,,,,,//验证客户端连接。
,,,,,,,,,,,,,,,,,,,如果(Response.IsClientConnected)
,,,,,,,,,,,,,,,,,,,{
,,,,,,,,,,,,,,,,,,,,,,,//读取数据缓冲区。
,,,,,,,,,,,,,,,,,,,,,,,长度=iStream。null

利用ASP.Net怎么对大文件进行下载