Храните изображение в Firebase Storage и сохраняйте метаданные в Firebase Cloud Firestore (Beta)

Я пытаюсь загрузить изображение в хранилище Firebase и сохранить несколько определенных метаданных в Cloud Firebase. Я кодирую в JavaScript.

Цель - установить также настроенные метаданные в Firebase Cloud, например, из поля ввода текста, которое пользователь должен заполнить.

То, как я храню изображения в хранилище Firebase:

storageRef.child('images/' + file.name).put(file, metadata).then(function(snapshot) {
        console.log('Uploaded', snapshot.totalBytes, 'bytes.');
        console.log(snapshot.metadata);
        var url = snapshot.downloadURL;
        console.log('File available at', url);
        // [START_EXCLUDE]
        document.getElementById('linkbox').innerHTML = '<a href="' +  url + '">Click For File</a>';
        // [END_EXCLUDE]
      }).catch(function(error) {
        // [START onfailure]
        console.error('Upload failed:', error);
        // [END onfailure]
      });
      // [END oncomplete]
    }

Ответ 1

Возможно, вы сможете загрузить данные в Firestore после завершения загрузки.

storageRef.child('images/' + file.name).put(file, metadata).then(function(snapshot) {
console.log('Uploaded', snapshot.totalBytes, 'bytes.');

let db = firebase.firestore();
let dbRef = db.collection("images").doc(file.name);

let setData = dbRef.set({
    //yourdata here
    downloadURl: snapshot.downloadURL
}).then( () => {
    console.log("Data stored in Firestore!");
});

// your actions

Ответ 2

Если я понимаю, что вам нужно, это легко сделать с помощью функций Firebase:

https://firebase.google.com/docs/storage/extend-with-functions

Вы можете активировать функцию, когда что-то в хранилище изменяется, и, таким образом, легко записывать данные в базу данных реального времени или в новую (er) базу данных Firestore.

Вот простой фрагмент со страницы, на которую я ссылался, чтобы увидеть, как это может выглядеть:

exports.generateThumbnail = functions.storage.object().onChange(event => {
  // ...
});

Ответ 3

Ссылка на источник

Загрузка изображений в Firestore и сохранение метаинформации в облачном хранилище

enter image description here

import { AngularFireStorage, AngularFireUploadTask } from '@angular/fire/storage';
import { AngularFirestore, AngularFirestoreCollection } from '@angular/fire/firestore';
import { Observable } from 'rxjs';
import { finalize, tap } from 'rxjs/operators';

...
...
...

// The main task
this.task = this.storage.upload(path, file, { customMetadata });

// Get file progress percentage
this.percentage = this.task.percentageChanges();
this.snapshot = this.task.snapshotChanges().pipe(

  finalize(() => {
    // Get uploaded file storage path
    this.UploadedFileURL = fileRef.getDownloadURL();

    this.UploadedFileURL.subscribe(resp=>{
      this.addImagetoDB({
        name: file.name,
        filepath: resp,
        size: this.fileSize
      });
      this.isUploading = false;
      this.isUploaded = true;
    },error=>{
      console.error(error);
    })
  }),
  tap(snap => {
      this.fileSize = snap.totalBytes;
  })
)