助けてください
クライアントから画像を受け取り、サーバーのファイルシステムに保存してこの画像を処理した後、firebaseストレージにアップロードする必要があります
私の非同期機能でNode.jsからfirebaseストレージに画像ファイルをアップロードしてみます
const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path);
await firebase.storage().ref().child('my_image.jpg').put(file);
...
しかし、私はエラーがあります
最初の引数は、文字列型またはBufferのインスタンスでなければなりません。 Uint8Arrayのインスタンスを受け取りました
わかりました、私はバイナリ形式を試します
const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path, { encoding: 'base64' });
await firebase.storage().ref().child('my_image.jpg').putString(file, 'base64');
...
そして、私はエラーが出ます
Firebase Storage:文字列がフォーマット 'base64'と一致しません:無効な文字が見つかりました
私はすでに多くのことを試しましたが、何もうまくいきません!何が悪いのですか?
おそらく、お使いのノードのバージョンは、{ encoding: 'base64' }
オプションを指定したreadFileSync
関数をサポートしていません。
バッファを文字列に変換するオリジナルの方法を試してください:
const file = readFileSync(path).toString('base64');
// now file is a base64 string
await firebase.storage().ref().child('my_image.jpg').putString(file, 'base64');
Node jsの場合、'@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
おそらく、サービスアカウントキーを使用してnodejsクライアントを認証する必要があります。これを見る https://cloud.google.com/docs/authentication/getting-started