Загрузка текстового файла из AWS S3 в Swift 5 - PullRequest
0 голосов
/ 28 марта 2019

Это, вероятно, очень простой ответ.Я довольно новичок в Swift и просто промокаю ногами от AWS.Я просто хочу загрузить файл JSON в строковую переменную в Swift, чтобы я мог проанализировать и т. Д. Я не могу найти хороший пример (кроме повторяющегося, показывающего, как загрузить изображение).

Я видел пример изображения, где обработчик завершения обращается к данным, т.е. UIImage(data: data!)!, но я не могу найти эквивалент для текстового файла.

Я знаю, что я вхожу через учетные данные и конфигурацию, и это все правильно.Я просто не могу вытеснить текстовые данные из результата.Вот фрагмент кода, который, я думаю, должен вернуть то, что я хочу.Мне просто нужно знать, где это ...

func getJSON() {

    let S3BucketName: String = "mybucket"
    let S3DownloadKeyName: String = "myfile.txt"

    let expression = AWSS3TransferUtilityDownloadExpression()
    expression.progressBlock = {(task, progress) in DispatchQueue.main.async(execute: {
        print("Downloading...")
    })
    }

    let transferUtility = AWSS3TransferUtility.default()
    transferUtility.downloadData(fromBucket: S3BucketName, key: S3DownloadKeyName, expression: expression) { (task, URL, data, error) in
            if error != nil {
                print(error!)
                return
            }
            DispatchQueue.main.async(execute: {
                print("Got here")
                // I would expect to find data in an attribute here
            })
    }
}

Я бы подумал, что фактическую строку можно получить из значения "data" в обработчике завершения, но я просто не уверен, как его достичьили в каком свойстве оно существует. Я почти уверен, что провел исчерпывающий поиск аналогичного примера, который мог бы понять, но ничего не нашел.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 28 марта 2019

Добавление этого ответа, потому что комментарий @ Larme исчез. Очень просто данные должны быть закодированы. Это сработало:

    let transferUtility = AWSS3TransferUtility.default()
    transferUtility.downloadData(fromBucket: S3BucketName, key: S3DownloadKeyName, expression: expression) { (task, URL, data, error) in
            if error != nil {
                print(error!)
            }
            DispatchQueue.main.async(execute: {
                print("Got here")
                self.rawJSON = (String(data: data!, encoding: .utf8))!
                print(self.rawJSON)
            })
    }
...