ios& s3:使用url从s3下载图像

时间:2014-08-13 19:53:35

标签: ios amazon-s3

是否可以在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{
...

我收到了“图片下载错误:请求已超时。”

3 个答案:

答案 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上的图像设置为公开。