【问题标题】:Downloading Text File From AWS S3 in Swift 5在 Swift 5 中从 AWS S3 下载文本文件
【发布时间】:2023-04-01 05:37:01
【问题描述】:

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

我已经看到完成处理程序访问数据的图像示例,即UIImage(data: data!)!,但我找不到文本文件的等价物。

我知道我是通过凭据和配置进入的,而且这一切都是正确的。 我只是无法从结果中哄骗文本数据。这是我认为应该返回我想要的东西的 sn-p。我只需要知道它在哪里...

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
            })
    }
}

我认为实际的字符串可以从完成处理程序中的“数据”值中得到,但我只是不确定如何到达它或它存在于什么属性中。我很确定我做了详尽的搜索一个类似的例子,我可以理解,但没有找到任何东西。

非常感谢任何帮助。

【问题讨论】:

  • 哇,真快。谢谢@Larme - 完全符合我的预期。所以,我试过 String(data: data) 得到错误:“参数标签'(data:)'不匹配任何可用的重载”。是否有关于为什么需要编码为 UTF-8 的简要说明)?非常感谢...
  • 那么您需要指定使用哪种字符串编码方法来创建数据。通常是 utf8,但也可以是任何 (utf8, ascii, isoLatin1, isoLatin2, ...) developer.apple.com/documentation/swift/string/encoding
  • 是的,这对我来说非常有意义,因为它正在工作并且我有更多的时间来理解。谢谢。
  • 顺便说一句,最好将其保存为数据,创建符合 Decodable 的自定义结构并使用 JSONDecoder 解码您的 json 数据。
  • 谢谢,我当然可以将其视为更清洁的解决方案。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2019-03-04
    • 2018-10-10
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多