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