我们有一个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)。你有没有遇到过这样的问题?
答案 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()
解决了以防止执行模块。