C# 来自流的图像-仅在第一页加载时有效

C# 来自流的图像-仅在第一页加载时有效,c#,asp.net,C#,Asp.net,我们有一个代码片段,它正在将流转换为字节[],然后在aspx页面中将其显示为图像 问题是当第一次页面加载时,图像正在显示,但不显示以供以后的请求(重新加载等) 我观察到的唯一区别是“input”(ConvertStreamtoByteArray)中的流位置第一次为0,后续调用大于0。我该如何解决这个问题 context.Response.Clear(); context.Response.ContentType = "image/pjpeg"; context.Response.BinaryWr

我们有一个代码片段,它正在将流转换为字节[],然后在aspx页面中将其显示为图像

问题是当第一次页面加载时,图像正在显示,但不显示以供以后的请求(重新加载等)

我观察到的唯一区别是“input”(ConvertStreamtoByteArray)中的流位置第一次为0,后续调用大于0。我该如何解决这个问题

context.Response.Clear();
context.Response.ContentType = "image/pjpeg";
context.Response.BinaryWrite(ConvertStreamtoByteArray(imgStream));
context.Response.End();

private static byte[] ConvertStreamtoByteArray(Stream input)
{
    var buffer = new byte[16 * 1024];
    using (var ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}
我认为来源是: 我认为代码片段来自上面的链接,我看到除了方法名之外的所有匹配项。

您(很可能)持有对
imgStream
的引用,因此每次调用
ConvertStreamtoByteArray
时都使用相同的流

问题是流跟踪它们的
位置。当流是新的时,它从0开始,在读取整个流时结束

通常,这种情况下的解决方案是在复制流内容之前将
位置设置回0

在您的情况下,您可能应该1)在第一次需要时将
imgStream
转换为字节数组2)缓存此字节数组而不是流3)处置并丢弃
imgStream
,以及4)从此点开始将字节数组传递给
响应


看,这就是当你从互联网上复制代码时发生的事情。像这样奇怪的事情,重复地将同一个流转换成字节数组(浪费时间!),结果你没有使用。在2000年代,手动复制流是非常困难的

那么您在哪里初始化
imgStream
?imgStream正在会话中。您不能,或者至少不应该在会话中存储流。这不是我的代码,我只是想修复一个bug。但我有时会从网上复制代码。我必须承认!