2016-09-07 3 views
13

Я использую S3 bucket для загрузки изображения из моего проекта swift, однако время от времени моя загрузка приостанавливается и дает мне следующее предупреждение в консоли. Тем не менее, я не уверен, почему, но загрузка появляется автоматически, и второй раз почти всегда удается. И любая загрузка после этого нормально нормально. (Только тогда, когда я не взаимодействовали с сервером на некоторое времяAmazon Web Service S3 тайм-аут

AWSiOSSDK v2.4.7 [Error] AWSURLSessionManager.m line:212 | -[AWSURLSessionManager URLSession:task:didCompleteWithError:] | Session task failed with error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x13eba2b50 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=https://s3.amazonaws.com/myBucketName/filename.jpg, NSErrorFailingURLKey=https://s3.amazonaws.com/myBucketName/filename.jpg, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 

Ниже приводится, как я отправить файл S3

// 2. Create upload request 
let uploadRequest = AWSS3TransferManagerUploadRequest() 
uploadRequest.bucket = "myBucket" 
uploadRequest.key = "FileName.jpg" 
uploadRequest.ACL = AWSS3ObjectCannedACL.PublicRead 
uploadRequest.contentType = "image/jpg" 
uploadRequest.body = url 


// Track progress through an AWSNetworkingUploadProgressBlock 
uploadRequest?.uploadProgress = {[weak self](bytesSent:Int64, totalBytesSent:Int64, totalBytesExpectedToSend:Int64) in 
    dispatch_sync(dispatch_get_main_queue(), {() -> Void in 

     let progress = Float(totalBytesSent)/Float(totalBytesExpectedToSend) 

     print(" totalBytesSent \(totalBytesSent)/totalBytesExpectedToSend \(totalBytesExpectedToSend) progress = \(progress * 100) %") 

     circularProgressView.setProgress(progress, animated: true) 

    }) 
} 

// 3. Upload to Amazone S3 
let transferManager = AWSS3TransferManager.defaultS3TransferManager() 
transferManager.upload(uploadRequest).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task: AWSTask) -> AnyObject? in 

    MRProgressOverlayView.dismissOverlayForView(self.view, animated: true) 
    self.enableUserInteraction() 

    if let error = task.error { 

     if error.domain == AWSS3TransferUtilityErrorDomain { 

      switch task.error?.code { 
      case AWSS3TransferManagerErrorType.Cancelled.rawValue?: 
       break 
      case AWSS3TransferManagerErrorType.Paused.rawValue?: 
       break 
      default: 
       self.showErrorAlert("Error uploading image #1", message: "\(error)") 
      } 
     } else { 
      self.showErrorAlert("Error uploading image #2", message: "\(error)") 
     } 

    } else { 

     if task.completed { 
      let imgLink = "https://s3.amazonaws.com/letzzeeamazones3bucket2/\(uploadRequest.key!)" 
      self.postToFirebase(imgLink, userCoordinate: userCoordinate) 

     } else { 
      self.showErrorAlert("Error uploading image #3", message: "Please try again later") 
      MRProgressOverlayView.dismissOverlayForView(self.view, animated: true) 
      self.enableUserInteraction() 
     } 
    } 
+0

Вы используете симулятор? – JAL

+0

Это происходит как на моем симуляторе, так и на устройстве – user172902

+0

В чем вопрос? Ожидаются ожидания. AWS может скрыть их от вас, но они показывают вам, что происходит, когда у них слишком много запросов на выполнение и слишком мало доступных ресурсов. Я использую службу b2 Backblaze, и я вижу то же самое: время от времени время от времени. Эти таймауты вызывают у вас проблемы? –

ответ

0

Всякий раз, когда Amazon AWS Mobile SDK отображает нечеткое предупреждение в консоли, включите многословной протоколирования для отладки:

(Swift 3) AWSLogger.default().logLevel = .verbose
(Swift 2) AWSLogger.defaultLogger().logLevel = .Verbose

..., чтобы узнать больше о том, какие ведра, регионы, конечные точки S3 и т. Д. Используются.

+0

'AWSLogger' - устарел. Используйте 'AWSDDLog.sharedInstance.logLevel = .verbose' – Alex0072005