存储和数据库之间的关系 - Firebase

Pat*_*kkx 5 javascript firebase reactjs

我正面临另一个问题。

我使用 firebase db 来存储文本和 firebase 存储来存储文件。我的问题来了。

从数据库中获取特定元素时,如何从存储中获取正确的图像?

这是我的尝试:

const storageRef = firebase.storage().ref('companyImages/companyImage' + 123);
                                            ^^^^^^^^^^^^ I dont have access to id yet :(
const task = storageRef.put(companyImage);

task.on('state_changed', () => {
  const percentage = (snap.bytesTransferred / snap.totalBytes) * 100; 
                               // ^^^^^^^^^^^^ not sure if i even need this
}, (err) => {
    console.log(err);
}, () => {
  firebase.database().ref('offers').push(values);
    ^^^^^^^^^^^^^^^ now I could retrieve id from it with .key but its too late
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我首先要做的是上传图像,当它成功时,我开始将数据上传到数据库。

尽管如此,它并没有像预期的那样工作。上传图像时,我必须用正确的名称命名它,id以便稍后在组件中轻松检索它。

它可能看起来有点复杂,但会感谢任何形式的帮助。任何建议或提示。

我应该先将数据上传到数据库,然后再将图像上传到存储吗?

Cal*_*lam 2

您可以在上传文件 \xe2\x80\x93 之前生成推送 ID,您也可以仅将返回快照的下载 URL 保存在 at task.snapshot.downloadURL,这样您就不必使用存储引用从存储中检索文件。

\n\n
const offerRef = firebase.database().ref('offers').push();\nconst storageRef = firebase.storage().ref(`companyImages/${offerRef.key}`);\nconst task = storageRef.put(companyImage);\n\ntask.on('state_changed', (snap) => {\n  const percentage = (snap.bytesTransferred / snap.totalBytes) * 100; \n}, (error) => {\n  console.log(err);\n}, () => {\n  offerRef.set(values);\n});\n
Run Code Online (Sandbox Code Playgroud)\n