C# 如何传输字节数组映像?

C# 如何传输字节数组映像?,c#,asp.net,image,stream,C#,Asp.net,Image,Stream,出于某种奇怪的原因,一个通过IE6使用了五年的内部asp.net web应用程序突然出现了一个问题,尽管没有代码更改。某些正在流式传输回web浏览器的图像不会显示给某些用户 我不知道为什么会突然发生这种情况,也不知道原因是什么——不过,作为搜索的一部分,我正在考虑用于流回图像的代码中是否存在缺陷 图像以字节数组形式保存在内存中,然后使用以下代码流回。这是流式处理图像的最佳方法吗 Response.Clear(); Response.ClearHeaders(); Response.ClearCo

出于某种奇怪的原因,一个通过IE6使用了五年的内部asp.net web应用程序突然出现了一个问题,尽管没有代码更改。某些正在流式传输回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类型)

我可能对此有错误,但我认为
内容长度
应该包含以字节为单位的正文长度<代码>响应。BinaryWrite < /代码>将Base64编码更长的数据,然后是<代码>字节[]/Cord>长度。您正在告诉它在页眉中。< > P> <代码>响应。Enter()/<代码>通常是坏的,因为它在IsIs线程中中止,即使它在FLUSEH()-ING的中间。


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

乍一看,这似乎是合适的,但您能否概述一下您的客户端有哪些“问题”?这都是图像还是只是一些?随机的他们是下载这些图片还是嵌入到父页面?当图片不出现时,你会得到什么?Blank,Red-X等?@Mantorok@Damien_The_unsiver我已经用澄清更新了原始问题。我认为Leon的答案可能是正确的,当我在关闭之前忘记刷新响应时,这会敲响一个警钟,你只能得到一半的内容,所以很可能是这样。我们的网络最近将反病毒软件改为Sophos 9.7,我想知道这是否有联系…嗯,鉴于只有一些客户有这个问题,这似乎不太可能,但你的回答肯定提出了一个好问题!我现在很好奇。
.BinaryWrite
.OutputStream.Write
的包装器,可以正确地用于传输二进制数据。它不执行任何编码。正如@Damien_非信徒正确指出的,响应不会被编码。因此,我的整个答案是错误的。我已经将代码更新为那些
Response.Flush();Response.Close()
而不是
Response.End()
——不幸的是,它给出了相同的结果result@Peter检查IIS设置是否没有更改-特别是我记得使用HTTP压缩时出现的问题,因为这会破坏我们的一些流媒体功能。