希望这不重复...
假设我有一个png格式的图像,大小约为300kb,我从这样的aspx文件发送到客户端:
Bitmap img = new Bitmap(filepath);
using(MemoryStream ms = new MemoryStream())
{
img.save(ms, ImageFormat.Png);
Response.ContenType="image/png";
ms.WriteTo(Response.OutputStream);
}
img.Dispose();
在客户端javascript中,它只是:
var img = new Image();
img.src = xxx.aspx?param=semething;
这通常有效......但偶尔反应似乎会缩短。 Chrome会等待请求,直到超时为止。在firebug中,在Net选项卡下的Images视图中,请求实际上显示如下内容:
Get xxx.aspx?param=something hostUrl 0(14.7mb) 127.0.0.1:80
那个14.7mb看起来非常古怪...在它看似超时后,firebug实际上会显示整个加载的图像..所以在这种情况下IIS会发出一切......
在所有情况下,标题都正确显示contentType和content-Length。 在我关闭浏览器或从网页上提取图像之前,有时请求才会结束。然后我可以找到IIS向事件日志发送错误消息,说明远程主机已关闭连接。
我似乎无法确定问题所在......
更改为简单地执行Response.TransmitFile(filePath),但问题仍然存在。 至少在chrome中我认为请求最终会在90秒后被浏览器终止。 IIS没有记录任何错误...... 看起来IIS认为它已经完成了所有必须做的事情......但是在浏览器的路上......在本地机器上丢失了一些东西。
我将系统带到另一台机器并稍后测试... 并且稍后尝试更改为.ashx ...
答案 0 :(得分:1)
不确定其他代码是否正在运行,但您需要先确认清除响应,然后再将其写入其中:
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
另外,我强烈建议您使用 Response.TransmitFile 而不是将文件读入内存,读取它然后写入输出流可能真的耗费内存。
修改强>
此外,如果您可以更改为使用.ashx而不是.aspx,它可能会更快。