4

我正在使用 NSURLConnection sendSynchronousRequest 方法下载图像,并且效果很好。但是,有时我会遇到图像 URL 指向图像文件以外的其他内容的问题。例如,我发现这个非图像 URL 引起了问题: http://www.100plusposters.com/images/ExoticFlowers.jpg 该 URL 返回一个网页,我认为这是因为站点中缺少图像。

Objective-C 的一个好处是无效图像不会导致崩溃。它简单而安静地继续前进,只是不显示任何图像,但这仍然是一个问题。

如何在显示之前验证返回的数据以确保它是有效的图像文件?

谢谢!

我的相关代码,以防万一……

NSError *error = nil;
NSURLResponse *response;
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5];

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

if(data != nil && [error localizedDescription] == nil) 
{
    //Create UIImage object using initWithData method
    //Display UIImage
}
4

3 回答 3

8

看起来 NSURLResponse 对象包含一个MIMEType 属性。这应该让您很好地了解返回数据的类型。

于 2009-07-07T21:24:31.877 回答
4

我们能把这个问题更进一步吗?如果图像数据不完整或从服务器损坏怎么办?完整的传输工作,MIME 类型是 image/jpeg,UIImage 是构造的并且非 nil 但渲染器发现数据中的不一致并且日志可能显示“Bad Huffman code”或“premature end of data segment”

在将 UIImage 扔到视图上下文中并因此在屏幕上获得不漂亮的图像之前,我将如何捕获此错误?

于 2009-07-30T18:07:15.167 回答
0

我认为通过交叉检查从 Http 请求的标头中获得的内容长度,最终收到的数据会告诉你,下载的数据是否完整。

关于腐败我没有太多信息。

于 2009-07-31T10:42:56.287 回答