如何解析从Firebase Storage Swift 3

时间:2017-01-25 00:16:46

标签: ios swift parsing firebase firebase-storage

我正在使用Swift 3创建一个管理事件条目的应用程序。我使用Firebase存储客户端的CSV文件。这些CSV文件表示事件的所有参与者的数据库。

存储在Firebase存储中的CSV文件中的行示例:

id;event;lastname;firstname;phone;email;address;zipcode;city;added_in_event;comment;checked;checked_date;created;created_uid
479;NULL;CHARLANES;Herve;Google;NULL;NULL;NULL;NULL;NULL;NULL;1;24/11/2016 11:43;NULL;NULL
480;NULL;CHARLANES;Eve;Google;NULL;NULL;NULL;NULL;NULL;NULL;1;24/11/2016 13:21;NULL;NULL[...]

Firebase网站为您提供了解如何使用Firebase存储来存储图像以及如何从我们的应用程序下载此图像的教程。它非常简单,您只需使用参考gsReference.data(withMaxSize: 1 * 1024 * 1024) { data, error in [...]并存储数据'的结果即可。 NSData中的UIImage类型,工作已完成。

指向Firebase教程的链接:https://firebase.google.com/docs/storage/ios/download-files

但今天,我想下载CSV文件而不是图片。正如Firebase教程所说,“数据”的结果是'类型NSData是我刚刚下载的CSV。我想阅读我的文件内容并将所有行存储到tab []中。 但是,当我打印数据时,我可以获得的唯一信息是CSV文件的正确大小" 1796字节"对于此示例而非我的CSV内容。

所以我试图对来自数据的NSData进行编码,但它也不起作用......

你们有一些技巧给我?

以下是我的功能示例:

  func downloadMyCSV(){
        //Firebase Storage Reference
        let storage = FIRStorage.storage()
        //location of my CSV file in Firebase Storage Reference
        let gsReference = storage.reference(forURL: "gs://xxxx-xxxx.appspot.com/USERS_BDD_CSV/XXXxq5qur9XQOqAOoAeWH9F5AXo2/Tab-User-Trial.csv")

        //Firebase function for download a file with a reference
        gsReference.data(withMaxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                //Sh*t happen
                print(error.localizedDescription)
            } else {
                print(data)//print : "1796 bytes" the exacte size of my CSV file stored in firebase storage

                if data != nil {//Me trying to encode
                    do {
                        let dataString = String(data: data!, encoding: .utf8)
                        let s = try String(contentsOf: url!, encoding : .utf8)
                        print("my data : \(dataString)")
                        print(s)
                    }catch let error as NSError{
                        print(error)
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

您提出的问题实际上与Firebase无关。您只想解析代表CSV文件的Data / NSData。从Firebase Storage下载数据与其格式无关,因为它只是存储原始数据。

CSV文件只是以逗号分隔或以分号分隔的纯文本,因此请将您下载的数据视为String

请注意以下事项:

无论您使用何种方法(d)将CSV文件上传到Firebase存储,请确保稍后使用其字符编码来解码下载的数据。这就是你如何获得Swift UTF8的{​​{1}}数据表示(在Swift 3中)

String

解析传入的CSV数据:

正如您在示例中所做的那样,将数据解码回字符串:

let data = "myCSVString".data(using: .utf8)

为了方便处理,请获取CSV中所有字符串的数组:

let dataString = String(data: data!, encoding: .utf8)    // this is only valid if you used UTF8 to encode it

如果你想要一个较少的手动方式,那么就没有必要重新发明轮子了。

一些CSV解析器:

使用其中一个为您提供了一些优势,即已经有一些有用的方法,并且能够将内容拆分为更多的组件(行,标题等等),而这些组件需要的工作量比我提供的例子。