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