Как загрузить файл в S3, используя alamofire 4.8, используя multipartFormData с ключом доступа? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь загрузить напрямую в s3 с помощью alamofire (мое приложение должно работать на Apple Watch, а aws-ios-sdk не работает на Apple Watch).Я знаю, что должен подписать URL-адрес, но не знаю, как напрямую сформировать запрос с учетом URL-адреса.Однако мой нынешний подход, похоже, ничего подобного не делает.Я нашел несколько похожих вопросов, которые, кажется, не относятся к загрузке с помощью alamofire напрямую в s3, от начала до конца, включая подписывание URL с ключами доступа и секретами.

код

class UploadUtil 
    public func upload(file: URL, key: String, success: @escaping ()->()) {
        let access_key = "AKIA123453435242"
        let secret = "abcdefghijklmnopqrstuvwxyz"
        Alamofire.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(unicornImageURL, withName: "unicorn")
                multipartFormData.append(rainbowImageURL, withName: "rainbow")
            },
            to: "https://mybucket.s3.amazonaws.com",
            encodingCompletion: { encodingResult in
                switch encodingResult {
                    case .success(let upload, _, _):
                        upload.responseJSON { response in
                            debugPrint(response)
                        }
                    case .failure(let encodingError):
                        print(encodingError)
                }
            }
        )
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

Вам нужно будет использовать свои кредиты AWS, чтобы подписать запрос.Подробности о схеме подписи приведены здесь: https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html

Тем не менее, вы, возможно, не захотите встраивать кредиты AWS в свое приложение для часов.Их будет сложно поворачивать / управлять, не выталкивая обновление приложения.

Входят ли ваши пользователи в какой-либо веб-сервис, которым вы управляете?Если это так, вы можете сделать так, чтобы они загружали туда двоичные объекты (используя аутентифицированный POST), а затем помещали данные в S3.Или вы могли бы предложить вашему веб-сервису предварительно назначенный URL пользователям, которые они используют для загрузки данных.Или вы можете настроить приложение watch для службы, используя что-то вроде API Gateway, а затем использовать лямбда-обработчик для помещения данных в S3.

Если вы выполняете какой-либо «социальный вход» (войдите через facebook, войдите в систему с помощью Google и т. д.), вы можете использовать OAuth для IAM и получать уникальные кредиты для каждого пользователя.Это еще один путь, если вы хотите сделать это прямо из приложения, не поддерживая службу.

Если вы согласны встраивать один и тот же набор IAM-кредитов в каждое приложение для часов, посмотрите на SigV4, но я бы посоветовал посмотреть, есть ли способ аутентификации на основе отдельных пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...