繁体   English   中英

无法让 S3 上传在 Xcode 10.2/Swift 中工作

[英]Can't get S3 Uploads to work in Xcode 10.2/Swift

我正在构建一个 iOS 应用程序,我已经被 S3 上传困住了几天。 我一直在关注此处提供的文档:

https://aws-amplify.github.io/docs/ios/storage

当我点击这个函数时,它看起来好像在 Xcode 中一切正常,并且它没有返回任何错误。 但是,当我查看我的 S3 存储桶时,我发现该图像从未上传过。 这是我的上传功能(我也在这里放了凭证信息):

我认为我的困惑源于从 Cognito 获得凭据。 我觉得我需要 Cognito 凭证才能访问 AWS Transfer Utility,下面的代码似乎应该这样做?

@IBAction func uploadData() {

    let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast2, identityPoolId: "us-east-2:XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX", identityProviderManager:pool)
    let serviceConfiguration = AWSServiceConfiguration(region: .USEast2, credentialsProvider: credentialsProvider)
    let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "XXXX", clientSecret: "XXXX", poolId: "us-east-XXXX")

    let tu = AWSS3TransferUtilityConfiguration()

    AWSS3TransferUtility.register(with: serviceConfiguration!, transferUtilityConfiguration: tu, forKey: "UserPool")

    let transferUtility:(AWSS3TransferUtility?) = AWSS3TransferUtility.s3TransferUtility(forKey: "UserPool")
    AWSServiceManager.default()?.defaultServiceConfiguration = serviceConfiguration


    let data = self.imageView?.image?.pngData() // Data to be uploaded

    let expression = AWSS3TransferUtilityUploadExpression()
    expression.progressBlock = {(task, progress) in
        DispatchQueue.main.async(execute: {
            // Do something e.g. Update a progress bar.
        })
    }

    var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
    completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            // Do something e.g. Alert a user for transfer completion.
            // On failed uploads, `error` contains the error object.
        })
    }

    transferUtility!.uploadData(data as! Data,
                               bucket: "mybucket-env",
                               key: "YourFileName",
                               contentType: "image/png",
                               expression: expression,
                               completionHandler: completionHandler).continueWith {
                                (task) -> AnyObject? in
                                if let error = task.error {
                                    print("Error: \(error.localizedDescription)")
                                }

                                if let _ = task.result {
                                    // Do something with uploadTask.
                                }
                                return nil;
    }
}

文档已更新: https : //aws-amplify.github.io/docs/ios/storage

您可以在可以使用的地方使用 AWS Amplify 实现相同的功能

  1. 放大 CLI 以配置 S3 和认知资源

  2. 将配置文件添加到您的应用程序awsconfiguration.jsonamplifyconfiguration.json

  3. 安装依赖项

pod 'AmplifyPlugins/AWSS3StoragePlugin'
pod 'AWSMobileClient', '~> 2.12.0'
  1. 初始化 AWSMobileClient 并放大

  2. Amplify.Storage.uploadData()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM