- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Swift 3 创建一个应用程序来管理事件中的条目。我正在使用 Firebase 来存储我的客户端的 CSV 文件。这些 CSV 文件代表一个事件的所有参与者的数据库。
我的 CSV 文件中存储在 Firebase 存储中的行示例:
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 [...]
并存储类型为“数据”的结果UIImage
中的 NSData
,工作完成。
Firebase 教程链接:https://firebase.google.com/docs/storage/ios/download-files
但是今天,我想下载 CSV 文件而不是图像。正如 Firebase 教程所说,NSData
类型的“数据”中的结果是我刚下载的 CSV。我想读取文件的内容并将所有行存储到选项卡 [] 中。但是,当我打印“数据”时,我唯一可以获得的信息是本例中 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)
}
}
}
}
}
最佳答案
你问的实际上与 Firebase 无关。您只想解析代表 CSV 文件的 Data
/NSData
。从 Firebase 存储下载数据与其格式无关,因为它只是存储原始数据。
CSV 文件只是逗号分隔或分号分隔的纯文本,因此请将下载的数据视为 String
。
这里要记住一些事情:
无论您使用(d) 什么方法将 CSV 文件上传到 Firebase 存储,请确保稍后使用其字符编码来解码下载的数据。这就是您如何获得 Swift String
(在 Swift 3 中)的 UTF8
数据表示
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 中所有字符串的数组:
let csvStrings = dataString.components(separatedBy: ";")
// this can also be...
let moreGenericCSVStrings = dataString.components(separatedBy: [",", ";"]) // to handle comma separated CSV
如果您想要一种较少手动的方式来执行此操作,则无需重新发明轮子。
一些 CSV 解析器:
Objective-C 库:
Swift 库:
使用其中之一可以让您获得一些有用的方法的优势,并且能够将内容拆分为更多组件(行、标题等...),这比我提供的示例。
关于ios - 如何解析从 Firebase Storage Swift 3 下载的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841292/
嗨,当尝试将图像上传到 firebase 存储时,我正在使用 firebase 文档,但是出现此错误。 在范围内找不到“存储” let storage = Storage.storage() le
我最近在使用 Firebase 存储时遇到了一些问题。 当我们尝试访问刚刚上传的文件时,浏览器中出现此错误消息 { "error": { "code": 400,
这些是在不同版本的 NuGet 包之间迁移的重要指南: https://github.com/Azure/azure-sdk-for-net/blob/Azure.Storage.Blobs_12.6
警告: Warning: Can't resolve all parameters for Storage in /Users/zzm/Desktop/minan/node_modules/@ioni
我在圆形立方体中收到此错误(“连接到存储服务器失败”)行。我已经检查了所有内容,配置和数据库用户名密码,服务器详细信息都是干净的。谁能告诉我可能是什么问题。这里我给出了整个配置文件。
我希望能够限制容器的大小,但是使用默认的存储驱动程序aufs(对于Ubuntu 14.04),当我尝试使用--storage-opt参数时出现错误 $ docker create -it --name
我希望能够支持对使用 Google Cloud Storage 托管的静态 Assets 进行 Brotli 和 Gzip 编码。为此,我想在将文件上传为 之前对其进行编码, .gz和 .br .问
场景 我有几个由 Google Cloud Storage object.finalize 事件触发的 Google Cloud Functions。为此,我使用两个存储桶并使用“同步选项:覆盖目标位
我在 Google Cloud Storage 中有一个存储桶和一个网站。人们目前可以通过网站上传到存储桶(使用 Google 身份验证)。 但是,我需要设置它以便任何人都可以查看上传的文件(并且不能
如果文件被放入 Google Cloud 存储并公开,但该文件的网址在另一个网页上不存在,那么 Google 是否会在其搜索结果中将其编入索引?有人知道吗? 最佳答案 Google 的搜索索引独立于其
截至今天早上,我无法访问我的存储桶。 当我在导航上选择 Google Cloud Storage 选项卡时,一切都按预期加载,但不是显示我的两个存储桶,而是显示一个警告栏说: We were unab
我想弄清楚是否可以在 Windows 平台上使用 gsutil 的 cp 命令将文件上传到 Google Cloud Storage。我的本地计算机上有 6 个文件夹,每天都会向其中添加新的 pdf
我最近开始使用 Google Cloud Storage。最初我在安装 Cloud SDK 时创建了一个虚拟项目。现在我正在做另一个项目。 gsutil 仍然指向我以前的项目。我如何使它指向我的新项目
我目前正在这样做,但它非常慢,因为我的存储桶中有几 TB 的数据: gsutil du -sh gs://my-bucket-1/ 对于子文件夹也是如此: gsutil du -sh gs://my-
这可能看起来很天真,我知道我们可以在 blob 中创建文件夹,并且这些文件夹仍然存储在容器中。我们仍然可以对这些“blob 中包含的文件夹”执行通常对文件存储中的文件夹执行的所有操作。 我们仍然可以像
将文件上传到 Google Cloud Storage 时,有一个自定义数据字段元数据。 Google's example相当短: var metadata = { contentType: 'a
这可能看起来很天真,我知道我们可以在 blob 中创建文件夹,并且这些文件夹仍然存储在容器中。我们仍然可以对这些“blob 中包含的文件夹”执行通常对文件存储中的文件夹执行的所有操作。 我们仍然可以像
我有一个包含超过 2 万个文件名的 Google Storage 存储桶。有没有办法在短时间内列出存储桶中的所有文件名? 最佳答案 这取决于您所说的“短”是什么意思,但是: 您可以做的一件事来加快列出
有谁知道如果文件不存在,您是否需要为 Google Cloud Storage 中的文件请求付费?换句话说,有人访问您存储桶中不存在的文件是否计入您的请求?还是仅适用于存在的文件? 最佳答案 客户无需
在每一分钟结束时,我的代码总共会上传 20 到 40 个文件(从多台机器上并行上传大约 5 个文件,直到全部上传完毕)到 Google Cloud Storage。我经常收到 429 - Too Ma
我是一名优秀的程序员,十分优秀!