現在、Google Cloud Storageバケットに直接ファイルをアップロードするために@google-cloud/storage NPMパッケージを使用しています。これは、画像のbase64でエンコードされた文字列しか持たないので、いくつかのトリッキーが必要です。私がしなければならない: Node.jsを使用してBase64でエンコードされた画像(文字列)をGoogle Cloud Storageバケットに直接アップロードするにはどうすればよいですか?
- デコード文字列
- を
Google App Engineを使用しているので、ファイルシステムにファイルを保存しないようにしたいのですが、何らかの理由で削除操作が機能しない場合は、ファイルシステムを過負荷にするか、迷惑ファイルを残したくありません。これは私のアップロードのスクリプトは、今のように見えるものです:
// 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');
});
はなく、直接ファイルに変換して、パスを使用してアップロードすることの画像のbase64でエンコードされた文字列をアップロードするとにかくはありますか?
'bucket.upload'は'ファイルをラップします。createWriteStream'関数を使用しているので、base64ファイルの文字列を 'file'のそのメソッドで作成されたストリームにパイプする必要があります。私はちょうどファイルシステムに書いて、アップロード後にリンクを解除することをお勧めします。私はあなたがファイルを削除することに問題があるとは思わない。もしあなたがそうするなら、私は例を引き出すことができるかもしれません。 – forrestmid
@forrestmid直接アップロードするために 'file.createWriteStream'をどのように実装するのか、本当に感謝します。ありがとう! – Nag