Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在文件上载时将Firebase URL存储在变量中_Javascript_Firebase_Google Cloud Firestore_Firebase Storage - Fatal编程技术网

Javascript 如何在文件上载时将Firebase URL存储在变量中

Javascript 如何在文件上载时将Firebase URL存储在变量中,javascript,firebase,google-cloud-firestore,firebase-storage,Javascript,Firebase,Google Cloud Firestore,Firebase Storage,我正在尝试使用firebase存储和firestore在react js中实现上传功能。我有一个函数,可以将文件上传到firebase存储,然后将一些数据发布到firestore。我希望文件的url与进入firestore的数据一致。到目前为止,我只能将URL记录到控制台,但无法存储它。我已经在网上和firebase文档中查找了所有内容,但我找不到在上传时存储URL的方法 如果您对我可以尝试的事情有任何建议,我将不胜感激:) 我想看看是否能找到一个副本,但我想给你你首先需要使用的代码 正如Dou

我正在尝试使用firebase存储和firestore在react js中实现上传功能。我有一个函数,可以将文件上传到firebase存储,然后将一些数据发布到firestore。我希望文件的url与进入firestore的数据一致。到目前为止,我只能将URL记录到控制台,但无法存储它。我已经在网上和firebase文档中查找了所有内容,但我找不到在上传时存储URL的方法

如果您对我可以尝试的事情有任何建议,我将不胜感激:)

我想看看是否能找到一个副本,但我想给你你首先需要使用的代码

正如Doug所评论的,任何需要访问下载URL的代码都需要在
getDownloadURL()中。然后
回调

因此,在你的情况下:

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
变量

另见:


为什么不能存储URL?代码中存储URL的地方似乎就是您实际希望将编写文档的现有代码放在其中的地方。谢谢Doug的回复!因此,此代码失败,因为无法在函数内设置变量url。我想这与作用域有关?与Firebase API都是异步的这一事实有关。非常感谢!我要试一试。在函数内部这样做是有意义的。
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;
            });
        });
    });