C# &引用;GDI+;中发生一般性错误&引用;加载图像时

C# &引用;GDI+;中发生一般性错误&引用;加载图像时,c#,gdi+,system.drawing,C#,Gdi+,System.drawing,是的,再来一个。。。堆栈跟踪(有意义的部分): 当试图打开最终用户上传的图像文件时,会发生这种情况。代码大致如下(分解为基本部分): 然后在 MemoryStream stream = new MemoryStream(bytes); return Image.FromStream(stream); 所以本质上,它停止尝试从内存流加载图像。这种情况并不总是发生。事实上,我自己无法重现这个问题,但在过去两周内,它发生了大约20次,发生在几个不同的用户身上。我无法访问引发问题的实际文件 任何关于这

是的,再来一个。。。堆栈跟踪(有意义的部分):

当试图打开最终用户上传的图像文件时,会发生这种情况。代码大致如下(分解为基本部分):

然后在

MemoryStream stream = new MemoryStream(bytes);
return Image.FromStream(stream);
所以本质上,它停止尝试从内存流加载图像。这种情况并不总是发生。事实上,我自己无法重现这个问题,但在过去两周内,它发生了大约20次,发生在几个不同的用户身上。我无法访问引发问题的实际文件

任何关于这里可能发生的事情的线索都将不胜感激。

stream.Read(bytes,0,file.ContentLength)并不意味着它将准确读取
file.ContentLength
字节。读取的字节可能更少。您应该检查返回的值。你可能需要一个循环


让你的阅读看起来像这样:

HttpPostedFile file = Request.Files[name]; 
Stream stream = file.InputStream; 
byte[] bytes = new byte[ContentLength];
int bytesRead = stream.Read(bytes, 0, ContentLength);
int offset = bytesRead;
while(bytesRead > 0)
{
     bytesRead = stream.Read(bytes, offset, ContentLength - offset);
     offset += bytesRead;
} 
return bytes; 

如果位图太大,可能会发生这种情况。尝试制作一个大于2000x2000的位图,你会看到这个异常。如果是间歇性的,你确定用户没有上传损坏的图像吗?@SteveDanner不,我不确定。不幸的是,在处理上传的图像之前,目前没有保存这些图像的代码。我不得不在一堆乱七八糟的东西上加上。。。不管怎样,我最终可能会这么做。@YoryeNathan谢谢,今天晚些时候我会试试。知道为什么以及如何解决这个问题吗?@IliaG我建议将缓冲区分成图片的不同部分,并为每个部分设置位图。把这些放在一起,你会有一个完整的大画面的错觉。你可以使用
Stream.CopyTo(file.InputStream,memory\u Stream)
来代替循环,这对于一般情况来说是很好的,但我不相信它在这里有任何区别。不管怎样,我都会尝试,看看它是否会继续发生。
MemoryStream stream = new MemoryStream(bytes);
return Image.FromStream(stream);
HttpPostedFile file = Request.Files[name]; 
Stream stream = file.InputStream; 
byte[] bytes = new byte[ContentLength];
int bytesRead = stream.Read(bytes, 0, ContentLength);
int offset = bytesRead;
while(bytesRead > 0)
{
     bytesRead = stream.Read(bytes, offset, ContentLength - offset);
     offset += bytesRead;
} 
return bytes;