2012-10-16 47 views
0

希望这不是一个重复...保存巴纽的OutputStream截断

假设我有在大小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选项卡下查看,请求实际显示是这样的:

Get xxx.aspx?param=something hostUrl 0(14.7mb) 127.0.0.1:80 

这14.7MB小艾...的bizzare它看似超时后,萤火虫实际上显示整个加载的图像虽然..所以IIS看起来已经发出了在这种情况下的一切......

在所有情况下,标题正确显示contentType和content-Length。 有些时候,请求不会结束,直到我关闭浏览器或从网页中拉出图像。然后,我可以找到IIS向事件日志发送错误消息,说明远程主机关闭了连接。

我只是似乎无法针点问题......

  • 编辑 -

改为根本就一个Response.TransmitFile(文件路径),但问题仍然存在。 至少在Chrome中,我认为请求最终在90秒后被浏览器终止。 IIS没有记录任何错误... 看起来像IIS认为它已经完成了所有必须要做的事情......但在本地机器上浏览器的路上失去了一些东西......

我带系统到另一台机器,并对其进行测试后... 并且还尝试改变以后ashx的...

回答

1

不知道你需要什么其他的代码有运行,但要确保清除您回应你写东西进去之前,首先:

Response.Clear(); 
Response.ClearContent(); 
Response.ClearHeaders(); 

此外,我强烈建议你使用Response.TransmitFile,而不是读文件到内存,读取它,然后写入到输出流中可能是非常消耗内存。

编辑

此外,如果你可以改变使用.ashx的,而不是它的.aspx可能会更快。

+0

太好了。我会给它一点,先测试一下。 – user1600124

+0

好吧...我试着用Response.TransmitFile,并且清除响应内容。但问题依然存在。 当我有更多的时间在我的手上,我会尝试做一个.ashx,看看它是怎么回事。 – user1600124

+0

你有任何进一步的代码没有张贴在这里后,在文件阅读? –