从Firebase上传/下载数据时,我是否可以取得进展

时间:2017-01-23 18:43:51

标签: ios firebase swift3 firebase-realtime-database progress-bar

我需要在从Firebase数据库上传/下载数据时显示进度。 我能得到它吗?。我在Firebase存储中看到过,但我没有在Firebase数据库中看到过。

2 个答案:

答案 0 :(得分:1)

基于数据的进展:

我建议查看this post,因为它可以帮助您了解如何使用某些内置数据引用来确定上传进度。虽然iOS的,但它解释了如何衡量上传进度的思维过程。

您可以随时使用进度监视器:

let observer = uploadTask.observeStatus(.Progress) { snapshot in
  print(snapshot.progress) // NSProgress object
}

基于计数的进展:

至于FrankvanPuffelen所说的,实际上没有工具可以满足你的要求。但是,正如Jay所述,您可以根据您正在阅读/撰写的 来确定任务的“进度”。

比如说你正在写(上传)10张照片。对于每张成功写入(上传)的照片,您只需将某种进度表增加1/10即可。

用户设备上某些本地文件的示例:

// Some image on the device
let localFile = URL(string: "<PATH>")!

// Make a reference to the file that needs to be uploaded
let riversRef = storageRef.child("chicken.jpg")

// Upload the file to the path you specified
let uploadTask = riversRef.putFile(from: localFile, metadata: nil) { metadata, error in
    if let error = error {
        // Whoops, something went wrong :(
    } 
    else {
        // Tada! Uploaded file
        someCountVariable += 1

        // If needed / applicable 
        // let downloadURL = metadata!.downloadURL()
    }
}

当然,对于一(1)项,你将从0变为100(...快速 - 向Drake喊出),但这可以嵌套在一些循环中,循环遍历要上传的一些项目列表。然后每个项目成功上传增量。

如果您需要上传多个图片以外的对象,这在请求方面会更加昂贵,但出于此目的,这将为您提供良好的可视/数字方式跟踪至少多少项目可以成功上传。

如果您 真的 想要深入了解细节,您可以随时尝试检查当前的连接强度以确定相对数据传输速度,并与之交叉你正在尝试的当前任务。根据 应该 的过程需要多长时间,这可能会让您至少某些估算进度。

希望其中一些有助于/指出正确的方向。快乐的编码!

答案 1 :(得分:0)

  val bytesTransferred=taskSnapshot.bytesTransferred.toFloat()
                                val totalByteCount=taskSnapshot.totalByteCount.toFloat()
                                val progress = bytesTransferred / totalByteCount
                                Log.d("progress", (progress*100).toString())
                                Log.d("progressDivide", (bytesTransferred / totalByteCount).toString())
                                Log.d("progressbytesTransferred", bytesTransferred.toString())
                                Log.d("progresstotalByteCount", totalByteCount.toString())