我在美国西部(即加利福尼亚北部)设置了S3存储桶

我的Pool-ID以“us-east-1:*****”开头

我有以下代码将文件上传到名为AWS_BUCKET_NAME的存储桶中

let credentialProvider = AWSCognitoCredentialsProvider(regionType: .USWest1, identityPoolId: AWS_IDENTITY_POOL_ID)
    let configuration = AWSServiceConfiguration(region: .USWest1, credentialsProvider: credentialProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration
    let uploadingFileURL = videoURL
    let uploadRequest = AWSS3TransferManagerUploadRequest()
    uploadRequest?.bucket = AWS_BUCKET_NAME
    uploadRequest?.key = fileName
    uploadRequest?.body = uploadingFileURL
    uploadRequest?.contentType = "video/mp4"

    let transferManager = AWSS3TransferManager.default()
    transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread())
    { (task) -> Any? in
        if task.error == nil
        {
            return nil
        }
        else
        {
            print("Error: \(String(describing: task.error))")
        }
        return nil
    }

通常,它可以成功上传视频文件。但是有时它会像下面这样给与错误

错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器。” UserInfo = {NSUnderlyingError = 0x608001a53c50 {Error Domain = kCFErrorDomainCFNetwork代码= -1003“(null)” UserInfo = {_ kCFStreamErrorCodeKey = 8,kCFStreamErrorDomainKey = 12}},NSErrorFailingURLStringKey = https://cognito-identity.us-west-1.amazonaws.com/,NSErrorFailingURLKey = https://cognito-identity.us-west-1.amazonaws.com/Main,kCFStream =找不到具有指定主机名的服务器。}

现在,如果我将AWSCognitoCredentialsProvider中的regionType更改为USEast1或其他,然后再试一次,则它再次给我同样的错误,但是此后,如果我再次设置“USWest1”区域,则它会再次工作。它会继续成功工作5-6次,有时甚至更多。但是在一段时间后再次产生相同的错误。

另一件事,具有相同的池ID和区域,在android中工作正常。仅在iOS中面临此问题。

提前致谢。

最佳答案

最后,我找到了解决方案。这不是正确的答案,但可能会帮助面临此类问题的其他人。

let credentialProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: AWS_IDENTITY_POOL_ID)
    let configuration = AWSServiceConfiguration(region: .USWest1, credentialsProvider: credentialProvider)

Michael - sqlbot发表评论之后,我已经通过依次更改Region进行了检查。最后,我将使用.USEast1创建AWSCognitoCredentialsProvider并使用.USWest1配置AWSServiceConfiguration,它现在可以正常工作。

我不知道背后的原因,但可能需要使用正在使用的存储桶区域配置AWSServiceConfiguration

关于ios - 将文件上传到AWS S3存储桶,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47257891/

10-12 22:55