我在使用像这样的短网址下载.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
看起来像这样
My SLComposeViewController screenshot
我想在SLComposeViewController
中显示下载的图像答案 0 :(得分:3)
该缩短的网址不会将您重定向到图片文件,因为它受热链接保护。它会将您重定向到一个简单的HTML页面,您可以在其中查看图像。因此,NSData
使用dataWithContentsOfURL
不是图像文件数据,imageWithData
方法按预期返回nil。
并且你说它在发布时在Facebook上正确显示,然后看起来Facebook处理这个Dropbox图像热链接保护本身直接获取图像。
你可能需要自己做同样的伎俩。
答案 1 :(得分:3)
没有erkanyildiz也许您的上述答案是错误的,因为长短网址之间没有区别,他们都会将我重定向到图像一旦看到这个
这个缩短的网址不起作用,因为它来自DropBox
NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://db.tt/KH5NgfT1"] options:NSDataReadingUncached error:&error];
UIImage *downloadedImage=[UIImage imageWithData:imageData];
这个缩短的网址有效,因为它不是来自DropBox
NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://goo.gl/FTh7No"] options:NSDataReadingUncached error:&error];
UIImage *downloadedImage=[UIImage imageWithData:imageData];
这个长网址不起作用,因为它来自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];
这个长网址有效,因为它不是来自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服务器上可能是因为他们有某种web-encription,所以我们无法使用NSData dataWithContentsOfURL直接下载图像: 并且可能是因为它支持Facebook的网络编码。
解决方案是DropBox为下载图像提供了api https://api-content.dropbox.com/1/files/ /
DropBox Core API Documentation
感谢您的回复