如何判断Image.FromStream是否完整

时间:2011-09-18 18:53:19

标签: c# .net httpwebrequest gdi+ gdi

我有以下代码:

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[]

更新:

根据Darin的说法,当您尝试保存图像时会抛出ExternalException。但是,我自己的测试中,我截断了一个图像文件,显示FromStream实际上会在图像不正确的字节数时抛出ArgumentException。

1 个答案:

答案 0 :(得分:4)

  

如果读取超时,会发生什么?

在输入if条件之前将抛出异常。

  

或连接中止?

在输入if条件之前将抛出异常。

  

但我不知道如果图像只是部分下载它是否会抛出该异常。

无法部分下载图像。 GetResponseStream是一种阻止方法,意味着要么你得到了所有东西,要么是异常(当然,如果你提取的东西不是图像,但是当你获得某些HTML页面时,你也会得到异常尝试实例化Image GDI +对象。)

作为旁注,为了避免泄漏,您可能还希望将此Image一次性资源包装到using语句中。