我正在构建一个 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 实现相同的功能,您可以使用
增强 CLI 以配置 S3 和认知资源
将配置文件添加到您的应用:
awsconfiguration.json
和amplifyconfiguration.json
。安装依赖项
pod 'AmplifyPlugins/AWSS3StoragePlugin'
pod 'AWSMobileClient', '~> 2.12.0'
初始化 AWSMobileClient 和 Amplify
Amplify.Storage.uploadData()
关于ios - 无法让 S3 上传在 Xcode 10.2/Swift 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443508/