下载文件:截断

时间:2011-02-25 09:38:17

标签: c# asp.net iis download

我们有一个ASP.NET / C#2.0(.NET 2.0)Web应用程序。

为了使客户端以编程方式下载字节数组,我们有一段代码如下:

Response.ContentType = contentType ?? "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);    

Stream iStream = ...
byte[] buffer = new Byte[10000];

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.Flush();
Response.Close();

这适用于我们所有的安装但只有一个(在IIS 6上)我得到文件截断(大约30KB)。你有没有遇到过这样的问题?

3 个答案:

答案 0 :(得分:1)

你还没有说dataToRead来自哪里。

就我个人而言,我只是在length返回一个值

byte[] buffer = new byte[8 * 1024];
while (true)
{
    int length = input.Read(buffer, 0, buffer.Length);
    if (length <= 0)
    {
        break; // There are alternative ways of expressing this
    }
    output.Write(buffer, 0, length);
}

答案 1 :(得分:0)

我只使用Response.BinaryWrite而不是过去没有错误直接转到OutputStream。

我会阻止缓冲区控制刷新和关闭,让Response实例也管理缓冲,关闭等。这个循环看起来有点不寻常 - 我通常会读到直到流不再返回的字节。

答案 2 :(得分:0)

问题与模块有关。我们用Response.End()解决了以防止执行模块。