【问题标题】:Swift upload audio file to FirebaseSwift 将音频文件上传到 Firebase
【发布时间】:2017-10-14 01:56:50
【问题描述】:

您好,我尝试将 m4a 文件上传到 Firebase 存储,但总是收到错误“Error Domain=FIRStorageErrorDomain Code=-13000“发生未知错误,请检查服务器响应。” ResponseBody=无法完成上传。当前大小为 38298。预期最终大小为 34554。

这是我的代码:

func uploadSound(localFile: URL) {
    let storageRef = FIRStorage.storage().reference()
    let imagesRef = storageRef.child("upload")
    let fileName = "/" + self.deviceID + ".m4a"
   let uploadTask = spaceRef.putFile(localFile, metadata: nil) { metadata, error in
        if let error = error {
            print(error)
        } else {
            // Metadata contains file metadata such as size, content-type, and download URL.
            let downloadURL = metadata!.downloadURL()
        }
    }
}

感谢您的帮助..谢谢

【问题讨论】:

  • 嘿 Voyager,您找到解决方案了吗?

标签: ios swift firebase firebase-storage


【解决方案1】:

您创建以下变量,这两个变量均未使用:

let imagesRef = storageRef.child("upload")
let fileName = "/" + self.deviceID + ".m4a"

上传时您正在调用:

// where is `spaceRef`?
spaceRef.putFile(localFile, metadata: nil)

作为一个建议,也许可以尝试:

let newFileRef = imagesRef.child(fileName)
let uploadTask = newFileRef.putFile(localFile, metadata: nil) { metadata, error in
        if let error = error {
            print(error)
        } else {
            // Metadata contains file metadata such as size, content-type, and download URL.
            let downloadURL = metadata!.downloadURL()
        }
    }

【讨论】:

  • 嗨布拉德利,我认为我的存储安全没有问题,因为我可以上传带有数据的图像。
  • 还是一样,我尝试用Data改,但是文件好像损坏了,上传成功但是无法播放
【解决方案2】:

您还必须发送元数据并将文件作为数据发送,试试这个。对于 swift5

let metadata = StorageMetadata()
    metadata.contentType = "audio/m4a"
    let riversRef = Storage.storage().reference().child("message_voice").child("\(self.getDate()).m4a")
    do {
        let audioData = try Data(contentsOf: recorder.url)
        riversRef.putData(audioData, metadata: metadata){ (data, error) in
            if error == nil{
                debugPrint("se guardo el audio")
                riversRef.downloadURL {url, error in
                    guard let downloadURL = url else { return }
                    debugPrint("el url descargado", downloadURL)
                }
            }
            else {
                if let error = error?.localizedDescription{
                    debugPrint("error al cargar imagen", error)
                }
                else {
                    debugPrint("error de codigo")
                }
            }
        }
    } catch {
        debugPrint(error.localizedDescription)
    }

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2020-12-10
    • 2018-06-21
    • 2020-09-08
    • 1970-01-01
    • 2018-10-17
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多