Derzeit verwende ich das NPM-Paket @google-cloud/storage, um eine Datei direkt in einen Google Cloud Storage-Bucket hochzuladen. Dies erfordert einige Tricks, da ich nur die base64-kodierte Zeichenkette des Bildes habe. Ich muss:Wie lade ich ein base64-kodiertes Bild (String) mit Node.js direkt in einen Google Cloud Storage-Bucket hoch?
- Decode die Zeichenfolge
- Speichern als Datei
- den Dateipfad an den unten Skript zu Google Cloud Storage laden
- die lokale Datei löschen
Ich möchte es vermeiden, die Datei vollständig im Dateisystem zu speichern, da ich Google App Engine verwende. Ich möchte das Dateisystem nicht überladen/Junk-Dateien dort belassen, wenn der Löschvorgang aus irgendeinem Grund nicht funktioniert. Dies ist, was mein Upload-Skript wie jetzt aussieht:
// Convert the base64 string back to an image to upload into the Google Cloud Storage bucket
var base64Img = require('base64-img');
var filePath = base64Img.imgSync(req.body.base64Image, 'user-uploads', 'image-name');
// Instantiate the GCP Storage instance
var gcs = require('@google-cloud/storage')(),
bucket = gcs.bucket('google-cloud-storage-bucket-name');
// Upload the image to the bucket
bucket.upload(__dirname.slice(0, -15) + filePath, {
destination: 'profile-images/576dba00c1346abe12fb502a-original.jpg',
public: true,
validation: 'md5'
}, function(error, file) {
if (error) {
sails.log.error(error);
}
return res.ok('Image uploaded');
});
Gibt es trotzdem direkt die Base64-String des Bildes codiert zu laden, anstatt sie in eine Datei umwandeln zu müssen und dann den Pfad laden verwenden?
'bucket.upload' umschließt die' Datei.createWriteStream '-Funktion, so müssen Sie Ihre Base64-Datei Zeichenfolge in den Stream pipe, die von dieser Methode in' Datei' erstellt. Ich würde nur empfehlen, in das Dateisystem zu schreiben und die Verknüpfung nach dem Hochladen aufzuheben. Ich glaube nicht, dass Sie Probleme mit dem Löschen der Dateien haben werden. Ich könnte vielleicht ein Beispiel machen, wenn Sie so geneigt sind. – forrestmid
@forrestmid Wäre wirklich ein Beispiel dafür, wie Sie den 'file.createWriteStream' zum direkten Upload implementieren würden. Vielen Dank! – Nag