web-dev-qa-db-fra.com

Firebase Stockage Télécharger un fichier image de nœud.js

S'il vous plaît aider

Je reçois des images du client et enregistrez-la sur mon serveur dans le système de fichiers et traiter cette image, après quoi je dois le télécharger sur le stockage Firebase

J'essaie de télécharger le fichier image sur le stockage de FireBase à partir de nœud.js dans ma fonction asynchrone

const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path);
await firebase.storage().ref().child('my_image.jpg').put(file);
...

Mais j'ai une erreur

Le premier argument doit être de type chaîne ou une instance de tampon. Reçu une instance de uint8Array

Okey, j'essaie un format binaire

const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path, { encoding: 'base64' });
await firebase.storage().ref().child('my_image.jpg').putString(file, 'base64');
...

Et j'ai une erreur

Firebase Storage: String ne correspond pas au format 'base64': caractère invalide trouvé "

J'ai déjà essayé beaucoup de choses, mais rien ne fonctionne! Qu'est-ce que je fais mal?

5
magersoft

Peut-être que votre version de nœud ne prend pas en charge readFileSync fonction avec { encoding: 'base64' } option.

Essayez la manière originale de convertir un tampon en une chaîne:

const file = readFileSync(path).toString('base64');
// now file is a base64 string
await firebase.storage().ref().child('my_image.jpg').putString(file, 'base64');
0
hoangdv

Peut-être télécharger un Uint8Array au stockage n'était pas disponible il y a quelques mois, mais vous pouvez maintenant le faire. La seule chose est que vous devez ajouter le type de contenu d'un objet de métadonnées, de cette façon:

const file = new Uint8Array(...)
const metadata = { contentType: 'image/jpeg; charset=utf-8' }
const storageRef = firebase.storage().ref().child('path/to/image.jpg')

await storageRef.put(file, metadata).then((snapshot) => {
  console.log('Uploaded an array!', snapshot)
})
0
Sergio Cerrutti

Pour Node JS il y a une bibliothèque appelée '@google-cloud/storage

const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

const bucket = storage.bucket("my-bucket.appspot.com");
await bucket.upload(
            '/my_image_path.jpg', 
            {
                destination: 'my_uploaded_image.jpg',
                metadata: {
                    cacheControl: "public, max-age=315360000", 
                    contentType: "image/jpeg"
             }
        });

https://www.npmjs.com/package/@google-cloud/storage

Vous devez probablement authentifier votre client NODEJS avec la clé de compte de service. Voir ceci https://cloud.google.com/docs/authentication/geting-started

0
ZuzEL