1

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

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

我成功获得NSData了 41791 字节的长度。但问题是,当我将此 NSData 转换为 UIImage 时,它​​会给出 NULL,当我在 Facebook 上发布此 NULL 图像时,它已成功发布到我的 facebook 帐户,用于在我正在使用的 facebook 上发布,SLComposeViewController还有一件事是此图像也未显示在SLComposeViewController.

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

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

转换为 UIImage

UIImage *image=[UIImage imageWithData:downloadedImageData];

返回 NULL 图像

我的SLComposeViewController样子是这样的

我的 SLComposeViewController 截图

我想在 SLComposeViewController 中显示下载的图像

4

2 回答 2

3

该缩短的 URL 不会将您重定向到图像文件,因为它受热链接保护。它将您重定向到一个简单的 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

于 2013-11-05T11:52:13.567 回答
3

NO er​​kanyildiz 也许您的上述答案是错误的,因为长 URL 和短 URL 之间没有区别,一旦查看此 URL,它们都会将我重定向到图像

  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];
    

所以,最后我认为问题出在 DropBox 服务器上,可能是他们有某种网络编码,所以我们不能直接使用 NSData dataWithContentsOfURL: 下载图像,并且可能是因为它支持 Facebook 的网络编码。

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

DropBox 核心 API 文档

感谢回复

于 2013-11-05T19:58:52.193 回答