2014-08-13 4 views
1

Можно ли загрузить изображение с s3 с помощью url в iOS, поэтому мне не нужно использовать s3 sdk?ios & s3: скачать изображение с s3 с помощью url

Это более удобно для загрузки изображения с использованием url и NSURLConnection.sendAsynchronousRequest, так как я получаю URL напрямую.

Я попытался сделать это, но всегда получаю ошибку таймаута.

Если я переключу URL-адрес на другое изображение из Интернета, которое не находится в s3, я мог бы загрузить изображение успешно.

Изображение s3 может быть просмотрено в Интернете напрямую с помощью URL-адреса.

Код:

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{ 
... 

Я получил ": запрос истекло Загрузка изображения ошибки."

ответ

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-адреса. И в ответ я разбираю всю информацию об изображении.

+0

Привет, Олег, не могли бы вы взглянуть на мой код? Я не знаю, почему он не работает для s3, но он может загружать изображение с другого URL-адреса. И сколько времени требуется, чтобы загрузить изображение из s3? Спасибо! – fuiiii

+0

Мой друг, вероятно, вам нужно установить timeoutInterval для NSURLRequest, который составляет более 90 секунд. Также проверьте, что вы ведро в amazon s3. –

+0

Я мог просматривать изображение через URL-адрес в своем браузере. Означает ли это, что изображение можно загрузить в приложениях ios? – fuiiii

1

Я обнаружил, что если я изменю «https» на «http» в url, он будет работать. Так что я просто сделать это:

var urlString = self.thumbnailImageURL 
urlString = urlString.stringByReplacingCharactersInRange(
       Range<String.Index>(start: urlString.startIndex,end:advance(urlString.startIndex, 5)), withString: "http") 
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 устанавливается на публике.

+0

Perfect ... Вам не нужно устанавливать S3 SDK. Вышеприведенный ответ сделает трюк. Большое спасибо ... это сэкономило много времени ... –

Смежные вопросы