我已经将AWS iOS SDK (v.2.3.6)集成到我的应用程序中。它工作得很好,只是我注意到defaultServiceManager有一个免责声明:
“您应该使用此单例方法,而不是创建服务管理器的实例”。
我通常不会对此有异议,除非它的defaultServiceConfiguration是不可变的:
“此属性只能设置一次,而任何后续的设置程序都将被忽略。”
我有一个服务配置的要求。identityPoolId + region)能够在运行时更改。
有什么可能解决这个问题的方法?我希望能够在任何时候重置服务配置,但考虑到文档中的内容,这是不太可能的。
发布于 2016-04-14 02:44:17
不应更改默认服务配置。相反,每个服务客户端提供以下类方法:
+ register[ServiceClientName]WithConfiguration:forKey:
+ [ServiceClientName]ForKey:例如,对于AWSS3TransferUtility,它们是:
+ registerS3TransferUtilityWithConfiguration:forKey:
+ S3TransferUtilityForKey:通过这种方式,可以为运行时中的每个服务客户端传递不同的服务配置。通过遵循这种模式,您可以避免无意中“污染”的默认服务配置错误,这些错误很难调试。
发布于 2019-07-19 13:06:41
若要在每次上载时使用自定义配置,您可以使用会话创建临时访问键和机密。然后你可以用这些密钥上传你的文件。下面是代码片段
/// 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
}
}https://stackoverflow.com/questions/36565364
复制相似问题