【问题标题】:Upload file to AWS S3 bucket将文件上传到 AWS S3 存储桶
【发布时间】:2018-04-25 18:07:32
【问题描述】:

我在美国西部(即北加利福尼亚)设置了 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 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/, kCFStreamErrorCodeKeykCFStreamError=12, =8, NSLocalizedDescription=找不到具有指定主机名的服务器。}

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

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

提前致谢。

【问题讨论】:

  • 在我看来它要么与 DNS 解析相关,要么 AWS 有问题。这种情况发生了多久?有什么可以持续复制的吗?
  • 这是因为我已经实现了。即大约5天。这是不一致的。它的随机问题。
  • 您能否尝试使用不同的 DNS 服务器进行测试以查看问题是否解决?
  • 已尝试使用 3 种不同的 Wi-Fi、移动数据、LAN。还是同样的问题。
  • 这与 DNS 无关,@brandonscript... Cognito 没有 us-west-1 endpoint。问题似乎是为什么这段代码试图访问一个不存在的端点,或者为什么它根本工作......

标签: ios swift amazon-s3 aws-sdk


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 2017-10-17
    • 2020-10-10
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2015-09-10
    • 2018-09-29
    相关资源
    最近更新 更多