Процесс загрузки изображения в 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, поэтому нам нужна небольшая помощь.

Итак, два вопроса:-

  1. Правильная процедура для загрузки и получения изображений для S3 и AppSync.
  2. Необходимо ли использовать пул пользователей Cognito для загрузки и получения изображений.

Спасибо

Примечание: Любое предложение или улучшение или что-либо, связанное с AppSync, S3 или DynamoDB, будет по-настоящему оценено, и язык не является препятствием только для поиска направлений, так быстрых или объективных - без проблем.

1 ответ

Решение

Вам нужна индивидуальная защита для корзины, используя Cognito Federated Identities, которая дает каждому пользователю их собственную безопасную корзину. Вы можете использовать AWS Amplify, чтобы настроить его для своего проекта с $amplify add auth и выбрав конфигурацию по умолчанию, затем $amplify add storage который настраивает этот сегмент и пул с соответствующими разрешениями на использование личных загрузок.

Для получения дополнительной информации проверьте репо: https://github.com/aws-amplify/amplify-cli

Другие вопросы по тегам