Búsqueda de sitios web

angular - Descargar archivo desde Firebase Storage no funciona


En mi aplicación Angular estoy intentando recuperar un archivo guardado en el almacenamiento de Firebase.

Con este fin escribí el siguiente código:

    var storage = firebase.storage();
    var fileRef = storage.ref(`${this.idOfCurrentUser}/personalData.card`);

    var blob = null;

    console.log("THIS LINE DOES GET PRINTED");
    fileRef.getDownloadURL().then(function(url) {

        console.log("THIS LINE NEVER GETS PRINTED");
        var xhr = new XMLHttpRequest();
        xhr.responseType = 'blob';
        xhr.onload = function(event) {
            blob = xhr.response;  
        };
        xhr.open('GET', url);
        xhr.send();

    }).then(function() {
        //some more code
    }).catch(function(error) {
        console.log(error);
    });

Este código sigue la documentación de Firebase (https://firebase.google.com/docs/storage/web/download-files) ... pero no funciona.

Específicamente, el programa se queda atascado en la siguiente línea:

fileRef.getDownloadURL().then(function(url) {

No hay ningún mensaje de error en la consola. Pero la rueda gira para siempre y toda la aplicación se vuelve inutilizable.

¿Alguien sabe una forma que funcione de recuperar un archivo de Firebase Storage?

ACTUALIZACIÓN :

Siguiendo una sugerencia de Joseph Webber, cambié las primeras líneas del código a lo siguiente:

    var storage = firebase.storage();
    var id = this.idOfCurrentUser;
    var fileRef = storage.ref(`${id}/personalData.card`);

Sin embargo, el problema sigue exactamente igual.

ACTUALIZACIÓN2:

Siguiendo otra sugerencia de Joseph Webber, también intenté lo siguiente:

var fileRef = storage.child(`${id}/personalData.card`);

Sin embargo, esto da el siguiente mensaje de error:

"Property 'child' does not exist on type 'Storage'"

ACTUALIZACIÓN3:

también probé esto:

var fileRef = storage.ref(this.idOfCurrentUser + "/personalData.card");

... tampoco hizo ninguna diferencia

P.D.: Las reglas de almacenamiento son las siguientes:

Respuesta #1

Elimina this. de tu literal de plantilla.

var fileRef = storage.ref(`${idOfCurrentUser}/personalData.card`);

Editar

Intenta cambiar storage.ref a storage.child.

var fileRef = storage.child(`${id}/personalData.card`);

Respuesta #2

Ok, lo resolví ahora. El problema estaba relacionado con un bucle infinito en otra función que se ejecutaba en paralelo.

Artículos relacionados