首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS iOS SDK AWSServiceManager多服务配置

AWS iOS SDK AWSServiceManager多服务配置
EN

Stack Overflow用户
提问于 2016-04-12 06:39:32
回答 2查看 1.7K关注 0票数 3

我已经将AWS iOS SDK (v.2.3.6)集成到我的应用程序中。它工作得很好,只是我注意到defaultServiceManager有一个免责声明:

“您应该使用此单例方法,而不是创建服务管理器的实例”。

我通常不会对此有异议,除非它的defaultServiceConfiguration是不可变的:

“此属性只能设置一次,而任何后续的设置程序都将被忽略。”

我有一个服务配置的要求。identityPoolId + region)能够在运行时更改。

有什么可能解决这个问题的方法?我希望能够在任何时候重置服务配置,但考虑到文档中的内容,这是不太可能的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-14 02:44:17

不应更改默认服务配置。相反,每个服务客户端提供以下类方法:

代码语言:javascript
复制
+ register[ServiceClientName]WithConfiguration:forKey:
+ [ServiceClientName]ForKey:

例如,对于AWSS3TransferUtility,它们是:

代码语言:javascript
复制
+ registerS3TransferUtilityWithConfiguration:forKey:
+ S3TransferUtilityForKey:

通过这种方式,可以为运行时中的每个服务客户端传递不同的服务配置。通过遵循这种模式,您可以避免无意中“污染”的默认服务配置错误,这些错误很难调试。

票数 5
EN

Stack Overflow用户

发布于 2019-07-19 13:06:41

若要在每次上载时使用自定义配置,您可以使用会话创建临时访问键和机密。然后你可以用这些密钥上传你的文件。下面是代码片段

代码语言:javascript
复制
    /// This function is used to authorize user with AWS.
    private func connectWithAWS() -> AWSServiceConfiguration? {

        /// Simple session credentials with keys and session token.
        let credentialsProvider = AWSBasicSessionCredentialsProvider.init(accessKey: "TEMPORARY ACCESS KEY", secretKey: "TEMPORARY SECRET KEY", sessionToken: "TEMPORARY SESSION")

        /// A service configuration object.
        guard let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) else {
            return nil
        }

        return configuration
    }

    func uploadFileToS3() {

        /// Get configurations for bucket
        guard let configuration = connectWithAWS() else {
            ///AWSServiceConfiguration Not Initialised.
            return
        }

        ///Check if a AWSS3TransferUtility already exist for current access key or not.
        let trans = AWSS3TransferUtility.s3TransferUtility(forKey: "TEMPORARY ACCESS KEY")

        if trans == nil {
            /// If AWSS3TransferUtility is nil than create new for a access id
            ///
            AWSS3TransferUtility.register(with: configuration, transferUtilityConfiguration: nil, forKey: "TEMPORARY ACCESS KEY") { (err) in
                print("Error in AWSS3TransferUtility.register: ->>> \(err?.localizedDescription ?? "")")
            }
        }

        ///
        /// Check if a AWSS3TransferUtility already exist for current access key or not.
        guard let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: "TEMPORARY ACCESS KEY") else {
            return
        }

        ///
        /// Start Uploading process
        ///
        let expression = AWSS3TransferUtilityUploadExpression()
        expression.setValue("public-read", forRequestHeader: "x-amz-acl")

        let s3BucketName = "BUCKET NAME"

        let url = URL.init(fileURLWithPath: "fileURL")

        transferUtility.uploadFile(url, bucket: s3BucketName, key: "fileName", contentType: "contentType", expression: expression) { (task, error) in
            if error != nil {
                print("Upload failed ❌ (\(error!))")
                return
            }
            if task.status == AWSS3TransferUtilityTransferStatusType.completed {
                let s3URL = "https://\(s3BucketName).s3.amazonaws.com/\(task.key)"
                print("Uploaded to:\n\(s3URL)")
                return
            } else {
                print("Not uploaded")
            }

            }.continueWith { (task) -> Any? in
                if let error = task.error {
                    print("Upload failed ❌ (\(error))")
                }

                if task.result != nil, task.isCompleted == true {

                    let s3URL = "https://\(s3BucketName).s3.amazonaws.com/\(task.result!.key)"
                    print("Uploading Start of : \(s3URL)")

                } else {
                    print("Unexpected empty result.")

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

https://stackoverflow.com/questions/36565364

复制
相关文章

相似问题

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