我有以下代码:如何判断Image.FromStream完成
var request = (HttpWebRequest)HttpWebRequest.Create(url);
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null) {
Image newImage = Image.FromStream(stream, true);
pic.Thumb = newImage.ImageToByteArray();
}
会发生什么,如果读超时?或者连接中止下载?
文档说它会抛出一个ArgumentException
如果它不是一个有效的格式或为null,但我不知道如果它将抛出该异常,如果图像只是部分下载。
不幸的是,我不能依赖ContentLength头来告诉我文件的大小,因为服务器在于并且给出了比文件实际长度更大的内容长度。所以我希望Image.FromStream能够判断图像是否完整。
任何人都可以提供一些见解吗?
注:ImageToByteArray仅仅是使用内存流转换的Image
到byte[]
更新扩展方法:
据达林,那么ExternalException被抛出当您尝试保存图像。但是,我自己的截断图像文件的测试显示,如果图像不是正确的字节数,FromStream
确实会抛出ArgumentException。
对,这很有道理。如果服务器不发送完整图像会发生什么情况? (假设他们有负载问题,并在他们的后端获取超时,并发送一个部分图像,但否则连接是正常的) –
@Mystere人,我不明白。你的意思是服务器发送一个无效图像的字节数组,就像托管一个损坏图像的远程资源一样?如果是,那么当你试图将这个流加载到Image GDI +对象('Image.FromStream'方法)时,你会得到'ArgumentException'。 –
我的意思是,我不确定Image类是否会将部分图像检测为无效并引发ArgumentException。 –