将文件上载到AWS S3存储桶

时间:2017-11-13 05:55:01

标签: ios swift amazon-s3 aws-sdk

我在美国西部设置了S3存储桶,即N. California

我的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
    }

主要是成功上传视频文件。但有时它给出的错误就像吼叫

  

错误Domain = NSURLErrorDomain Code = -1003“找不到具有指定主机名的服务器。” UserInfo = {NSUnderlyingError = 0x608001a53c50 {Error Domain = kCFErrorDomainCFNetwork Code = -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/,kCFStreamErrorDomainKey = 12,_kCFStreamErrorCodeKey = 8,NSLocalizedDescription =找不到具有指定主机名的服务器。}

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

还有一件事,具有相同的池ID和区域,它在android中运行良好。只在iOS中遇到此问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

Michael - sqlbot评论之后,我通过一个接一个地更改了区域进行了检查。最后,我使用.USE1创建AWSCognitoCredentialsProvider并使用.USWest1配置AWSServiceConfiguration,现在它正在运行。

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