由于一些奇怪的原因,即使没有代码,一个已经使用IE6 的五年内部 asp.net网络应用突然出现问题变化。某些用户不会出现某些正在流回Web浏览器的图像。
我不知道为什么这突然发生或者原因是什么 - 但是作为搜索的一部分,我正在考虑用于流回图像的代码是否存在缺陷。
图像保存在内存中是一个字节数组,然后使用以下代码进行流式传输。这是流回图像的最佳方式吗?
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
// Work out file type
switch( Path.GetExtension( imageFilename ).ToLower() )
{
case ".jpg":
case ".jpeg":
Response.ContentType = "image/jpeg";
break;
case ".gif":
Response.ContentType = "image/gif";
break;
default:
Response.ContentType = "binary/octet-stream";
break;
}
Response.AddHeader("Content-Length", imageBytes.Length.ToString() );
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite( imageBytes );
Response.End();
不显示页面中的图像,而是显示红叉。这只发生在页面上显示的动态生成的图像上,而不是静态链接的图像。
如果我尝试在它自己的窗口中打开图像,我要么看到图像,要么看到一堆gobbledygook文本(我猜这意味着MIME类型没有被浏览器设置/拾取)
答案 0 :(得分:1)
Response.End()
通常很糟糕,因为它会中止IIS线程,即使它位于Flush()的中间。
使用Response.Flush()
后跟Response.Close()
来确保将所有内容发送到客户端。
答案 1 :(得分:0)
我可能错了,但我认为Content-Length
应该包含正文的长度。 Response.BinaryWrite
将对数据进行base64编码,该数据将比标题中的byte[]
长度更长。