asp.net 文件下载功能函数代码整理

复制代码 代码如下:

  public void FileDownLoadDel(string fullFilename)

  {

  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 = fullFilename;

  filepath = Server.MapPath(filepath);

  // 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.ContentType = "application/octet-stream";

  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;

  Response.Clear();

  }

  }

  Response.End(); //没有这句会将该页面刷新后的内容追加写入文件中。

  }

  catch (Exception ex)

  {

  // Trap the error, if any.

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

  //base.WriteLog("资料", "下载资料:" + ex.Message + "!", LogType.Error, this.GetType().ToString());

  }

  finally

  {

  if (iStream != null)

  {

  //Close the file.

  iStream.Close();

  }

  File.Delete(fullFilename);

  }

  }