Я нахожусь в процессе создания приложения для iOS, и я застрял на загрузках S3 в течение нескольких дней. Я следил за документацией, представленной здесь:
https://aws -amplify.github.io / документы / ИОС / хранение .
Когда я нажимаю эту функцию, кажется, что все работает в 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;
}
}