2016-09-07 20 views
13

Tôi đang sử dụng S3 bucket để tải lên hình ảnh từ dự án swift của mình, tuy nhiên, mỗi lần tải lên của tôi tạm dừng và cung cấp cho tôi cảnh báo sau trong bảng điều khiển. Tuy nhiên, tôi không chắc chắn lý do tại sao nhưng tải lên dường như tự động khởi động lại và lần thứ hai hầu như luôn thành công. Và bất kỳ tải lên nào sau đó thường tốt. (Nó chỉ là khi tôi đã không tương tác với máy chủ cho một lúcAmazon Web Service S3 đã hết thời gian

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

Dưới đây là làm thế nào tôi gửi hồ sơ cho 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

Bạn đang sử dụng trình mô phỏng? – JAL

+0

Điều này xảy ra cả trên giả lập và thiết bị của tôi – user172902

+0

Câu hỏi là gì? Thời gian chờ được mong đợi. AWS có thể ẩn chúng khỏi bạn, nhưng chúng cho bạn thấy những gì đang xảy ra khi họ có quá nhiều yêu cầu để đáp ứng và quá ít tài nguyên sẵn có. Tôi sử dụng dịch vụ b2 của Backblaze và tôi thấy điều tương tự: thời gian chờ theo thời gian. Những thời gian chờ này có gây ra sự cố cho bạn không? –

Trả lời

0

Bất cứ khi nào Amazon AWS Mobile SDK sẽ hiển thị một cảnh báo rõ ràng trong giao diện điều khiển, bật verbose khai thác gỗ để gỡ lỗi:

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

… để tiết lộ thêm thông tin về các thùng S3, vùng, điểm cuối vv đang được sử dụng.

+0

'AWSLogger' - không được chấp nhận. Sử dụng 'AWSDDLog.sharedInstance.logLevel = .verbose' – Alex0072005

Các vấn đề liên quan