簡體   English   中英

亞馬遜網絡服務S3超時

[英]Amazon Web Service S3 timed out

我正在使用S3 bucket從我的swift項目上傳圖像,但是,我的上傳時不時地暫停並在控制台中給出以下警告。 但是,我不確定為什么,但上傳似乎自動重啟,第二次幾乎總是成功。 之后的任何上傳通常都很好。 (只有當我暫時沒有與服務器交互時

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()
        }
    }

每當Amazon AWS Mobile SDK在控制台中顯示不明確的警告時,請打開詳細日志記錄以進行調試:

(Swift 4) AWSDDLog.sharedInstance.logLevel = .verbose

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

...以顯示有關正在使用的S3存儲桶,區域,端點等的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM