私は現在、画像のアップロードを受け入れ、GCSクライアントライブラリを使用してストレージに書き込むGAEで実行されているアプリに取り組んでいます(以前は同じ結果でCloud Storage APIを使用していました)。私が見ている問題は、ファイルが書き込まれた後、既に Google アカウントでログインしている場合にのみファイルにアクセスできることです。課金を有効にしており、GAE ID (XXXXXX@appspot.gserviceaccount.com) がチーム メンバーとして Google API プロジェクトに所有者として追加されています。
私は次のコマンドを使用しました: gsutil setdefacl public-read gs://mybucket
(バケット名はライブコードで正しいです)。
ACL に次のエントリがあります。
<Entry>
<Scope type="AllUsers"/>
<Permission>
READ
</Permission>
</Entry>
そして、私はこのコードで書き込みを初期化しています:
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(bucket, fileName);
GcsFileOptions options = new GcsFileOptions.Builder()
.mimeType(mime)
.acl("public-read").build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);
アプリはファイルの URL をクライアントに返します。前述のように、これはどの Google ユーザーに対しても正常に機能しますが、他のユーザーがhttps://storage.cloud.google.com/mybucket/filenameにアクセスしようとするとリダイレクトされます。 .png URL。また、クラウド ストレージの Web インターフェイスにログインしているときに、[SHARED PUBLICLY] 列 (ダッシュが含まれている) のボックスをマウスオーバーすると、ホバー メッセージが表示されます。 ACL」です。ただし、問題なくファイルを削除でき、ログインしているアカウントは API プロジェクトの所有者として設定されています。
ここで何か簡単なことを見逃していると確信していますが、すべてのドキュメントを調べて、数日間これに取り組んできました。どんな洞察も高く評価されます。