gpt4 book ai didi

c# - 如何判断 Image.FromStream 是否完整

转载 作者:行者123 更新时间:2023-11-30 21:12:30 25 4
gpt4 key购买 nike

我有以下代码:

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();
}

如果读取超时会怎样?或者连接在下载过程中中止?

文档说,如果它不是有效格式或为 null,它将抛出 ArgumentException,但我不知道如果图像仅部分下载,它是否会抛出该异常。

不幸的是,我不能依赖 ContentLength header 来告诉我文件的正确大小,因为服务器撒谎并提供比文件实际长度更大的内容长度。所以我希望 Image.FromStream 能够判断图像是否完整。

谁能在这里提供一些见解?

注意:ImageToByteArray 只是一种扩展方法,它使用内存流将 Image 转换为 byte[]

更新:

根据 Darin 的说法,当您尝试保存图像时会抛出 ExternalException。但是,我自己截断图像文件的测试表明,如果图像的字节数不正确,FromStream 实际上会抛出 ArgumentException。

最佳答案

What happens if the read times out?

在进入if条件之前会抛出异常。

Or the connection is aborted?

在进入if条件之前会抛出异常。

but I have no idea if it will throw that exception if the image is only partially downloaded.

无法部分下载图像。 GetResponseStream 是一种阻塞方法,这意味着您要么获得所有内容,要么获得异常(当然,如果您获取的不是图像而是某些 HTML 页面,那么在您的情况下,您也可能获得异常当您尝试实例化 Image GDI+ 对象时发生)。

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

关于c# - 如何判断 Image.FromStream 是否完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7463653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com