在Swift 5中从AWS S3下载文本文件

时间:2019-03-28 14:38:05

标签: swift amazon-web-services amazon-s3 download completion

这可能是一个非常简单的答案。我对Swift非常陌生,只是对AWS有所了解。我只想在Swift中将JSON文件下载到字符串var中,以便我可以进行解析等。我找不到一个很好的示例(除了重复的示例显示了如何下载图像)。

我已经看到了图像示例,其中补全处理程序访问数据,即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
            })
    }
}

我认为实际字符串可以从完成处理程序中的“数据”值中获取,但是我根本不确定如何到达它或它所存在的属性。我很确定我做了详尽的搜索我可以理解但没有找到任何类似示例的例子。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

添加此答案是因为@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)
            })
    }