首页 > 编程 > .NET > 正文

ASP.Net下载大文件的实现方法_.Net教程

2024-07-10 12:52:53
字体:
来源:转载
供稿:网友

推荐:Asp.net获取服务器指定文件夹目录文件并提供下载的方法
这篇文章主要介绍了Asp.net获取服务器指定文件夹目录文件并提供下载的方法,涉及使用http协议操作文件的技巧,需要的朋友可以参考下 本文实例讲述了Asp.net获取服务器指定文件夹目录文件并提供下载的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:string dir

  这篇文章主要介绍了ASP.Net下载大文件的实现方法,较为详细的分析了实现大文件下载的思路及具体注意事项,需要的朋友可以参考下

  本文实例讲述了ASP.Net下载大文件的实现方法。分享给大家供大家参考。具体分析如下:

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

  关于此代码的几点说明:

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

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

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

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

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

  代码如下:

  using System;

  namespace WebApplication1

  {

  public partial class DownloadFile : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  System.IO.Stream iStream = null;

  // Buffer to read 10K bytes in chunk:

  byte[] buffer = new Byte[10000];

  // Length of the file:

  int length;

  // Total bytes to read.

  long dataToRead;

  // Identify the file to download including its path.

  string filepath = Server.MapPath("/") +"./Files/TextFile1.txt";

  // Identify the file name.

  string filename = System.IO.Path.GetFileName(filepath);

  try

  {

  // Open the file.

  iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,

  System.IO.FileAccess.Read, System.IO.FileShare.Read);

  // Total bytes to read.

  dataToRead = iStream.Length;

  Response.Clear();

  Response.ClearHeaders();

  Response.ClearContent();

  Response.ContentType = "text/plain"; // Set the file type

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

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

  // Read the bytes.

  while (dataToRead > 0)

  {

  // Verify that the client is connected.

  if (Response.IsClientConnected)

  {

  // Read the data in buffer.

  length = iStream.Read(buffer, 0, 10000);

  // Write the data to the current output stream.

  Response.OutputStream.Write(buffer, 0, length);

  // Flush the data to the HTML output.

  Response.Flush();

  buffer = new Byte[10000];

  dataToRead = dataToRead - length;

  }

  else

  {

  // Prevent infinite loop if user disconnects

  dataToRead = -1;

  }

  }

  }

  catch (Exception ex)

  {

  // Trap the error, if any.

  Response.Write("Error : " + ex.Message);

  }

  finally

  {

  if (iStream != null)

  {

  //Close the file.

  iStream.Close();

  }

  Response.End();

  }

  }

  }

  }

 

  希望本文所述对大家的asp.net程序设计有所帮助。

 

分享:ASP.NET.4.5.1+MVC5.0设置系统角色与权限
这篇文章主要介绍了ASP.NET.4.5.1+MVC5.0设置系统角色与权限的部分内容,后续我们将继续讨论这个话题,希望小伙伴们喜欢。 数据结构 权限分配 1.在项目中新建文件夹Helpers 2.在HR.Helpers文件夹下添加EnumMoudle.Cs 代码如下: namespace HR.Helpers { public enum Enum

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表