【问题标题】:Firebase download progress observer error Swift 3Firebase下载进度观察器错误Swift 3
【发布时间】:2018-01-30 04:51:00
【问题描述】:

试图显示firebase下载进度,出现错误

“FIRStorageRef 类型的值没有成员观察”。

这是我从 firebase 文档中获得并尝试使用的代码。

    storage = FIRStorage.storage()

    let storageRef = storage.reference().child("Audio").child(successFileName)
    self.titleLabel.text =  self.successTitlename

    SwiftSpinner.show("Loading...")

    storageRef.downloadURL { url, error in
        if error != nil {

            SwiftSpinner.show("Couldn't load Audio...Tap to dismiss").addTapHandler({
                SwiftSpinner.hide()
            })
       **Getting error here** 
            storageRef.observe(.progress) { snapshot in
 // Download reported progress
    let percentComplete = 100.0 * Double(snapshot.progress!.completedUnitCount)
                    / Double(snapshot.progress!.totalUnitCount)
            }


}

任何帮助将不胜感激,在此先感谢。

【问题讨论】:

    标签: ios firebase swift3 firebase-realtime-database firebase-storage


    【解决方案1】:

    downloadURL() 不会像其他下载函数一样生成下载任务,因为它只返回下载 URL 而不是文件数据。

    您需要使用以下选项之一:write(toFile:)getData(maxSize:),最后是 task.observeStatus(.progress)。第一个将其下载到本地文件,而后者在内存中下载。

    来自文档的示例 (full source):

    // Create a reference to the file we want to download
    let starsRef = storageRef.child("images/stars.jpg")
    
    // Create local filesystem URL
    let localURL = URL(string: "path/to/stars.jpg")!
    
    // Start the download (in this case writing to a file)
    let downloadTask = storageRef.write(toFile: localURL)
    
    // Download in memory with a maximum allowed size of 10MB
    // let downloadTask = storageRef.getData(maxSize: 10 * 1024 * 1024)
    
    downloadTask.observe(.progress) { snapshot in
      // Download reported progress
      let percentComplete = 100.0 * Double(snapshot.progress!.completedUnitCount)
        / Double(snapshot.progress!.totalUnitCount)
      print("Done: \(percentComplete)%")
    }
    
    downloadTask.observe(.success) { snapshot in
      // Download completed successfully
      print("Downloaded successfully")
    }
    

    【讨论】:

    • 感谢您的回复,我正在从数据库中流式传输音频文件。我没有将文件保存到本地存储,这对我的情况有用吗?
    • 您如何流式传输音频文件?库或自定义代码?从 Firebase 获取文件的唯一方法是上述方法。 Firebase 不支持流式传输协议(如 HLS)或转码。
    • downloadURL 不提供进度报告,因为它只返回下载 URL 而不是数据。播放音频后可以使用AVPlayerViewController/AVAudioPlayer
    • 您可以自动回答您的问题。
    猜你喜欢
    • 2018-04-08
    • 2017-04-20
    • 2018-04-23
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多