Как сохранить Firebase URL в переменной при загрузке файла - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь сделать функцию загрузки в реакции- js, используя хранилище firebase и firestore. У меня есть функция, которая загружает файл в хранилище FireBase, а затем отправляет некоторые данные в FireStore. Я хочу, чтобы URL-адрес файла go с данными, которые идут в firestore. До сих пор я могу только записать URL на консоль, но не могу его сохранить. Я просмотрел всю информацию в Интернете и в документации по Firebase, но не могу найти способ сохранить URL при загрузке.

Если у вас есть предложения по поводу того, что я могу попробовать, я был бы признателен:)

publishHandler = (event) => {
    event.preventDefault();
    console.log(this.state.input);
    let url = "";
    let file = this.state.input.image;
    let storageRef = firebase.storage().ref();
    let uploadTask = storageRef.child("uploads/" +file.name).put(file);
    uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, 
        function (snapshot) {
            let progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            console.log("upload is " + progress + " % done.");
        },
        function(error) {
            console.log("Something went wrong..." + error);
        },
        function(complete) {
            uploadTask.snapshot.ref.getDownloadURL().then(function (downloadURL) {
                console.log(downloadURL);
                // Here is where I wish I could store the downloadURL into the url variable declared earlier
                url = downloadURL;

            });
        }
        );

    // Post data to firebase.
    db.collection("hittat").doc().set({
        title: this.state.input.title,
        amount: this.state.input.amount,
        description: this.state.input.description,
        url: url;
    });

};

1 Ответ

0 голосов
/ 14 марта 2020

Я посмотрю, смогу ли я найти дубликат, но хотел бы дать вам код, который вам нужно будет использовать в первую очередь.

Как прокомментировал Даг, любой код, который нужен доступ к URL-адресу загрузки, который должен быть внутри обратного вызова getDownloadURL().then.

Так что в вашем случае:

uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, 
    function (snapshot) {
        let progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
        console.log("upload is " + progress + " % done.");
    },
    function(error) {
        console.log("Something went wrong..." + error);
    },
    function(complete) {
        uploadTask.snapshot.ref.getDownloadURL().then(function (downloadURL) {
            console.log(downloadURL);
            // Here is where I wish I could store the downloadURL into the url variable declared earlier
            url = downloadURL;

            db.collection("hittat").doc().set({
                title: this.state.input.title,
                amount: this.state.input.amount,
                description: this.state.input.description,
                url: url;
            });
        });
    });

Это, вероятно, также означает, что вам не нужна переменная url больше.

См. также:

...