0

私は数週間、Express/Firebaseアプリケーションを開発しています。私は次の問題に遭遇するまで、すべてがうまく働いていますアップロードが成功した後、Google Cloud Storageがエンティティ/ユーザーを削除します

TypeError: firebase.storage is not a function

クイック検索がTypeError: firebase.storage is not a functionに私を導きました。だからそこに集まったソリューションを使って、@google-cloud/storageをsuccesffulyに設定しました。私はそれを行うの後は、私は手動でhttps://console.cloud.google.com/storage/

enter image description here

example.appspot.comバケットに私のfirebase管理者ユーザーを追加しなければならないことを学んだいくつかは、より多くのグーグル後

Caller does not have storage.objects.create access to bucket example.appspot.com

:しかし、その後、私はに走りました私は以下をテストします:

bucket.upload('./package.json') 
    .then((file) => { 
    console.log(file) 
    }) 
    .catch((error) => { 
    console.log(error) 
    }) 

これは完全に動作します。この問題は、私がExpressアプリケーションを停止してもう一度アップロードを試みるために再実行した結果、Caller does not have...エラーが再び発生した場合に発生します。バケットの権限を確認する、私は以前に追加したユーザーが今行っていることを参照してください。

enter image description here

私はここで何かが欠けていた場合、@google-cloud/storageパッケージのバグを知っている、あるいはどこかのバグはありませんelse。何か案は?

答えて

1

GCSは各アップロードを新しいオブジェクトと見なします。オブジェクトが既存のオブジェクトとして名前を共有する場合、既存のオブジェクトは削除され、ACLを含む新しいプロパティは古いオブジェクトとは関係ありません。

これはいくつかの方法で修正できます。最も簡単なのは、バケットの「デフォルトオブジェクトACL」にfirebase-storageを追加することです。これにより、特に指定しない限り、新しく作成されたすべてのオブジェクトに、そのサービスアカウントを含むACLが作成されます。あなたはのgcloud SDKがインストールされている場合は、コマンドラインからは、あなたがそうのようにこれを行うことができます:

gsutil defacl ch -u [email protected]:O gs://bucketname 

別のオプションは、明示的に直後のアップロードまたはの一部としてACLを設定することです。

関連する問題