来自Shorted URL的NSData不会生成UIImage

时间:2013-11-05 11:22:07

标签: ios objective-c uiimage nsdata url-shortener

我在使用像这样的短网址下载.jpg图像时遇到问题:

网址缩短: - https://db.tt/KH5NgfT1

我成功NSData长度为41791个字节。但问题是,当我将此NSData转换为UIImage时,它会给出NULL并且当我在faceBook上发布此NULL图像时它已成功发布到我的Facebook帐户,因为在fa​​cebook上发布我正在使用SLComposeViewController而且还有一件事就是这个图片也未显示在SLComposeViewController

我正在使用此代码下载图片

NSData *downloadedImageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:shortedURL]];

转换为UIImage

UIImage *image=[UIImage imageWithData:downloadedImageData];

返回NULL图像

和我的SLComposeViewController看起来像这样

My SLComposeViewController screenshot

我想在SLComposeViewController

中显示下载的图像

2 个答案:

答案 0 :(得分:3)

该缩短的网址不会将您重定向到图片文件,因为它受热链接保护。它会将您重定向到一个简单的HTML页面,您可以在其中查看图像。因此,NSData使用dataWithContentsOfURL不是图像文件数据,imageWithData方法按预期返回nil。

并且你说它在发布时在Facebook上正确显示,然后看起来Facebook处理这个Dropbox图像热链接保护本身直接获取图像。

你可能需要自己做同样的伎俩。

例如,您的图片的直接热链接是:https://photos-3.dropbox.com/t/0/AAAZy24NIIDzdh-J7L2fei34nM1AMnuBbLcV-nc2VAvpTg/12/105579065/jpeg/1024x768/3/1383656400/0/2/04-11-2013_16-53-16.jpg/ooh2MQDiN0DOjsEiwM68rI2buAyfTtbfog-UzrmvMqw

答案 1 :(得分:3)

没有erkanyildiz也许您的上述答案是错误的,因为长短网址之间没有区别,他们都会将我重定向到图像一旦看到这个

  1. 这个缩短的网址不起作用,因为它来自DropBox

    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://db.tt/KH5NgfT1"] options:NSDataReadingUncached error:&error];
    UIImage *downloadedImage=[UIImage imageWithData:imageData];
    
  2. 这个缩短的网址有效,因为它不是来自DropBox

    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://goo.gl/FTh7No"] options:NSDataReadingUncached error:&error];
    UIImage *downloadedImage=[UIImage imageWithData:imageData];
    
  3. 这个长网址不起作用,因为它来自DropBox

    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.dropbox.com/s/5443wq99wu9a0bu/IMG_3679.PNG"] options:NSDataReadingUncached error:&error];
    UIImage *downloadedImage=[UIImage imageWithData:imageData];
    
  4. 这个长网址有效,因为它不是来自DropBox

    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.wired.com/wiredenterprise/wp-content/uploads/2013/07/20130627-DROPBOX-OFFICE-147edit.jpg"] options:NSDataReadingUncached error:&error];
    UIImage *downloadedImage=[UIImage imageWithData:imageData];
    
  5. 所以,最后我认为问题出在DropBox服务器上可能是因为他们有某种web-encription,所以我们无法使用NSData dataWithContentsOfURL直接下载图像: 并且可能是因为它支持Facebook的网络编码。

    解决方案是DropBox为下载图像提供了api https://api-content.dropbox.com/1/files/ /

    DropBox Core API Documentation

    感谢您的回复