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?
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');
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)
})
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