web-dev-qa-db-ja.com

Firebase StorageがNode.jsから画像ファイルをアップロードする

助けてください

クライアントから画像を受け取り、サーバーのファイルシステムに保存してこの画像を処理した後、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'と一致しません:無効な文字が見つかりました

私はすでに多くのことを試しましたが、何もうまくいきません!何が悪いのですか?

3
magersoft

おそらく、お使いのノードのバージョンは、{ 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');
0
hoangdv

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

0
ZuzEL