iOS UIImageView dataWithContentsOfURL返回空

时间:2012-10-18 10:26:17

标签: objective-c ios image uiimageview

我正在尝试从UIImageView中的URL显示图像,我看到了一些非常特殊的结果。我正在测试的代码位于

之下
imageURL = @"http://images.shopow.co.uk/image/user_dyn/1073/32/32";
imageURL = @"http://images.shopow.co.uk/assets/profile_images/default/32_32/avatar-male-01.jpg";

NSURL *imageURLRes = [NSURL URLWithString:imageURL];
NSData *imageData = [NSData dataWithContentsOfURL:imageURLRes];
UIImage *image = [UIImage imageWithData:imageData];

NSLog(@"Image Data: %@", imageData);

在它的当前形式中,我可以看到输出窗口中的数据,这是我所期望的。但是如果注释掉第二个imageURL,那么我引用第一个我得到空数据,因此imageWithData返回nil。可能更令人困惑的是,第一个图像与第二个图像基本相同,但它是通过PHP处理脚本完成的。我几乎可以肯定,这不是造成问题的脚本,因为如果我使用它而不是

imageURL = @"http://images.shopow.co.uk/image/product_dynimg/389620/32/32"

显示图像,并使用相同的图像处理脚本。我很难找到导致这种情况发生的图像的任何差异。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这与服务器配置有关。

$ curl -v http://images.shopow.co.uk/assets/profile_images/default/32_32/avatar-male-01.jpg 

返回非零Content-Length和实际图像位。当我这样做时:

$ curl -v http://images.shopow.co.uk/image/user_dyn/633/32/32

我得到以下标题和零长度响应:

> GET http://images.shopow.co.uk/image/user_dyn/633/32/32 HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: images.shopow.co.uk
> Accept: */*
> Proxy-Connection: Keep-Alive
> 
< HTTP/1.1 200 OK
< Date: Thu, 18 Oct 2012 10:51:31 GMT
< Server: Apache/2.2.3 (Red Hat)
< X-Powered-By: PHP/5.3.15
< Vary: Accept-Encoding,User-Agent
< Content-Type: text/html; charset=UTF-8
< Content-Length: 0
< Proxy-Connection: Keep-Alive
< Connection: Keep-Alive

令人惊讶的是,在浏览器中,两个链接都可以工作并返回图像。

更新:我想通了。这是用户代理。试试这样:

$ curl -v \
    -A "User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4" \
    http://images.shopow.co.uk/image/user_dyn/633/32/32

然后你得到你的图像位。