是否可以在iOS中使用url从s3下载图像,这样我就不必使用s3 sdk了?
使用url和NSURLConnection.sendAsynchronousRequest下载图像更方便,因为我直接获取了url。
我试图这样做,但总是会出现超时错误。
如果我将网址切换到网页上不在s3中的其他图片,我可以成功下载图片。
可以直接使用网址在网上查看s3图片。
代码:
var urlString = self.thumbnailImageURL
var imgURL: NSURL = NSURL(string: urlString)
var request: NSURLRequest = NSURLRequest(URL: imgURL, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 90)
var urlConnection: NSURLConnection = NSURLConnection(request: request, delegate: self)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:
{(response: NSURLResponse!, data:NSData!,error:NSError!)-> Void in
if let e: AnyObject = error {
println("Image Download Error: \(error.localizedDescription)")
}else{
...
我收到了“图片下载错误:请求已超时。”
答案 0 :(得分:1)
嗨,这是个好问题。
是的,可以在不使用s3库的情况下保存图像。
我可以使用ASIHTTPRequest
提供我的解决方案。
- (ASIHTTPRequest *)newHttpRequest
{
NSString *path = [MEDispatcher sharedInstance].profileData.picture;
NSURL *url = [[NSURL alloc] initWithString:path];
ASIHTTPRequest *result = [[ASIHTTPRequest alloc] initWithURL:url];
[result setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[url release];
result.timeOutSeconds = MERequestTimeoutInterval;
return result;
}
是从url获取关于图像的数据的微笑请求。作为回应,我解析了有关图像的所有信息。
答案 1 :(得分:1)
我发现如果我在网址中将“https”更改为“http”,它就会起作用。 所以我只是这样做:
var urlString = self.thumbnailImageURL
urlString = urlString.stringByReplacingCharactersInRange(
Range<String.Index>(start: urlString.startIndex,end:advance(urlString.startIndex, 5)), withString: "http")
答案 2 :(得分:1)
- (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if ( !error )
{
UIImage *image = [[UIImage alloc] initWithData:data];
completionBlock(YES,image);
} else{
completionBlock(NO,nil);
}
}];
}
确保S3上的图像设置为公开。