代码之家  ›  专栏  ›  技术社区  ›  Ken Pespisa

如何在iPhone上验证从网络下载的图像文件?

  •  4
  • Ken Pespisa  · 技术社区  · 15 年前

    我正在使用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
    }
    
    3 回复  |  直到 15 年前
        1
  •  8
  •   EightyEight    15 年前

    看起来nsurlResponse对象包含 MIMEType property . 这应该能让您很好地了解返回数据的类型。

        2
  •  4
  •   Gerard Cerchio    15 年前

    我们能把这个问题再进一步吗?如果服务器的图像数据不完整或损坏怎么办?完整的传输工作,mime类型是image/jpeg,uiimage是构造的,非nil,但渲染器发现数据不一致,日志可能显示“坏的huffman代码”或“数据段过早结束”。

    在将uiimage抛出到视图上下文中,从而在屏幕上获得不漂亮的图像之前,我如何捕获此错误?

        3
  •  0
  •   Pramod Jain    15 年前

    我认为,通过交叉检查从HTTP请求的头部获得的内容长度,最终接收到的数据会给您提供,不管下载的数据是否完整。

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