Voyager
Voyager

Reputation: 399

Swift upload audio file to Firebase

Hi I try to upload a m4a file to Firebase Storage but always got error " Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." ResponseBody=Can not finalize upload. Current size is 38298. Expected final size is 34554.

This is my code :

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()
        }
    }
}

Appreciate for the help..thanks

Upvotes: 1

Views: 2606

Answers (2)

Angel Olvera
Angel Olvera

Reputation: 11

you have to send metadata too and the file as data, try this. for 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)
    }

Upvotes: 1

Bradley Mackey
Bradley Mackey

Reputation: 7668

You create the following variables, both of which are unused:

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

When you upload you are calling:

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

As a suggestion, maybe try:

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()
        }
    }

Upvotes: 0

Related Questions