如何流式传输字节数组图像



由于某种奇怪的原因,通过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();

页面中显示的不是图像,而是红十字。这种情况只发生在页面上显示的动态生成的图像上,而不是静态链接的图像上。

如果我尝试在它自己的窗口中打开图像,我会看到图像或大量官样文章文本(我猜这意味着浏览器没有设置/选择MIME类型)

Response.End()通常不好,因为它会中止IIS线程,即使它处于Flush()-ing的中间。

使用Response.Flush()Response.Close()确保所有内容都发送到客户端。

我可能错了,但我认为Content-Length应该包含以字节为单位的正文长度。Response.BinaryWrite将对数据进行base64编码,该数据将比您在标头中告诉它的byte[]长度更长。

相关内容

  • 没有找到相关文章

最新更新