我有以下代码:
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。
答案 0 :(得分:4)
如果读取超时,会发生什么?
在输入if
条件之前将抛出异常。
或连接中止?
在输入if
条件之前将抛出异常。
但我不知道如果图像只是部分下载它是否会抛出该异常。
无法部分下载图像。 GetResponseStream
是一种阻止方法,意味着要么你得到了所有东西,要么是异常(当然,如果你提取的东西不是图像,但是当你获得某些HTML页面时,你也会得到异常尝试实例化Image GDI +对象。)
作为旁注,为了避免泄漏,您可能还希望将此Image
一次性资源包装到using
语句中。