【问题标题】:Can I get progress while uploading/downloading data from Firebase从 Firebase 上传/下载数据时我可以取得进展吗
【发布时间】:2017-06-08 09:07:15
【问题描述】:

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

【问题讨论】:

  • “数据”是个大话题。您以什么方式从 firebase 上传/下载数据?发布您的代码,我们可以提供答案。
  • @Jay 我用过 ".updateChildValues(values)" userInfoRef.updateChildValues(values) { (error, reference) in }
  • 请在您的问题中发布您的代码。请发布 firebase 电话和关闭,我们会看看。
  • Firebase 数据库读取/写入没有进度测量。您唯一可以检测到的是读/写是否已完成。
  • @FrankvanPuffelen 感谢您的回答。这就是我的想法,但我需要确定。 :)

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


【解决方案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 大喊大叫),但这可以嵌套在某个循环中,该循环遍历要上传的一些项目列表。然后每个项目成功上传增量。

如果您需要上传多张图片以外的对象,这在请求方面会更昂贵,但出于此目的,这将为您提供一种很好的视觉/数字方法来跟踪至少有多少待上传项目成功。

如果您真的想要深入了解细节,您可以随时尝试检查当前连接强度以确定相对数据传输速度,并将其与您正在尝试的当前任务。这可能会让您至少一些根据流程应该实际花费的时间来估计进度。

希望其中的一些内容可以帮助/为您指明正确的方向。编码愉快!

【讨论】:

    【解决方案2】:
      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())
    

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2021-03-10
      • 1970-01-01
      • 2023-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多