首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法让S3上载在Xcode10.2/Swift中工作

无法让S3上载在Xcode10.2/Swift中工作
EN

Stack Overflow用户
提问于 2019-04-01 01:24:55
回答 1查看 368关注 0票数 0

我正在构建一个iOS应用程序,并且我已经被S3上传卡住了几天。我一直在遵循这里提供的文档:

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

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

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

代码语言:javascript
复制
@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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-30 01:44:43

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

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

  1. 放大命令行界面以调配S3和认知资源,并将配置文件添加到您的应用程序、

和dependencies

  1. awsconfiguration.json

代码语言:javascript
复制
pod 'AmplifyPlugins/AWSS3StoragePlugin'
pod 'AWSMobileClient', '~> 2.12.0'

初始化AWSMobileClient和Amplify

  • Amplify.Storage.uploadData()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55443508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档