我正在将文件上传到Firebase存储。然后我得到的文件URL如下
snapshot.ref.getDownloadURL().then(function(rawFileURL) {
console.log("File available at", rawFileURL);
this.downloadURL = rawFileURL;
});
现在,我正在尝试将此属性传递给要提交到Firestore文档的接口。这样。
let sData: Data = {
rawfilepath: this.downloadURL, // I also tried passing rawFileURL
//rawfilepath: audioImagesRef.toString(),
readyfilepath: "",
teller: form.value.steller,
title: form.value.stitle,
userid: uid,
}
将接口属性提交到Firestore时出现以下错误
ERROR FirebaseError:函数DocumentReference.set()用无效数据调用。不支持的字段值:未定义(在字段rawfilepath中找到)
如果我将普通字符串“”或说user.id传递给接口,则可以正常工作。但是,当我尝试将downloadURL存储在rawfilepath中时,它会出错。
任何帮助将不胜感激。预先感谢
答案 0 :(得分:1)
尽管很难看到可用数据的问题,但是可以安全地假设在分配this.downloadURL
之前先分配一个值。 snapshot.ref.getDownloadURL()
返回一个诺言,该诺言不按照之前或之后的代码异步运行。
您的情况的示例用法是
let sData: Data;
snapshot.ref.getDownloadURL().then(function(rawFileURL) {
sData = {
rawfilepath: rawFileURL,
readyfilepath: "",
teller: form.value.steller,
title: form.value.stitle,
userid: uid,
}
});
答案 1 :(得分:0)
错误告诉您rawfilepath(this.downloadURL
)未定义。您将必须进行一些调试以找出原因。在提供给this.downloadURL
的回调中提供值之前,您似乎正在尝试使用getDownloadURL()
。
请记住,返回承诺的函数是异步的,并在工作完成之前立即返回。因此,您只应在回调内部内部使用this.downloadURL
,或者在绝对确定回调已完成的其他时间使用