Процесс загрузки изображения в s3 с помощью AWS Appsync || Загрузка изображений iOS с помощью Appsync
Я работаю над новым проектом, который требует загрузки вложений в виде изображений. Я использую DynamoDB и AppSync API для вставки и извлечения данных из базы данных. Поскольку мы новичок в AppSync и во всех сервисах и базе данных amazon, которые мы используем для приложения, я немного запутался в процессе аутентификации. Прямо сейчас мы используем ключ API для аутентификации, и я попробовал эти шаги, чтобы загрузить изображение на s3.
1 Настройте AWSServiceManager
со статической конфигурацией, как:-
let staticCredit = AWSStaticCredentialsProvider(accessKey: kAppSyncAccessKey, secretKey: kAppSyncSecretKey)
let AppSyncRegion: AWSRegionType = .USEast2
let config = AWSServiceConfiguration(region: AppSyncRegion, credentialsProvider: staticCredit)
AWSServiceManager.default().defaultServiceConfiguration = config
2 Загрузка изображения этим методом:-
func updatePictureToServer(url:URL, completion:@escaping (Bool)->Void){
let transferManager = AWSS3TransferManager.default()
let uploadingFileURL = url
let uploadRequest = AWSS3TransferManagerUploadRequest()
let userBucket = String(format: "BUCKET")
uploadRequest?.bucket = userBucket
let fileName = String(format: "%@%@", AppSettings.getUserId(),".jpg")
uploadRequest?.key = fileName
uploadRequest?.body = uploadingFileURL
transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in
if let error = task.error as NSError? {
if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
switch code {
case .cancelled, .paused:
break
default:
print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
}
} else {
print("Error uploading: \(String(describing: uploadRequest!.key)) Error: \(error)")
}
completion(false)
return nil
}
_ = task.result
completion(true)
print("Upload complete for: \(String(describing: uploadRequest!.key))")
return nil
})
}
3 И, наконец, я могу видеть загруженное изображение в корзине S3
Но я обеспокоен тем, как сохранить URL-адрес изображения и как получить изображение, потому что, когда мне нужно сделать PUBLIC для получения изображения, и я не думаю, что это хороший подход, к тому же необходимо иметь пользовательский пул Cognito, потому что мы еще не используем пул пользователей Cognito в нашем приложении и не обладаем достаточными знаниями об этом, и документы не помогают в практических ситуациях, потому что мы впервые внедряем ti, поэтому нам нужна небольшая помощь.
Итак, два вопроса:-
- Правильная процедура для загрузки и получения изображений для S3 и AppSync.
- Необходимо ли использовать пул пользователей Cognito для загрузки и получения изображений.
Спасибо
Примечание: Любое предложение или улучшение или что-либо, связанное с AppSync, S3 или DynamoDB, будет по-настоящему оценено, и язык не является препятствием только для поиска направлений, так быстрых или объективных - без проблем.
1 ответ
Вам нужна индивидуальная защита для корзины, используя Cognito Federated Identities, которая дает каждому пользователю их собственную безопасную корзину. Вы можете использовать AWS Amplify, чтобы настроить его для своего проекта с $amplify add auth
и выбрав конфигурацию по умолчанию, затем $amplify add storage
который настраивает этот сегмент и пул с соответствующими разрешениями на использование личных загрузок.
Для получения дополнительной информации проверьте репо: https://github.com/aws-amplify/amplify-cli