4

私は現在、画像のアップロードを受け入れ、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 プロジェクトの所有者として設定されています。

ここで何か簡単なことを見逃していると確信していますが、すべてのドキュメントを調べて、数日間これに取り組んできました。どんな洞察も高く評価されます。

4

2 に答える 2

5

公開読み取りの問題

ドメインは、storage.cloud.google.comログイン ユーザーとしてのみアクセスできる Cloud Storage UI によって使用されます。API エンドポイントではありません。https://storage.googleapis.com/bucketname/objectnameまたはを使用する必要がありますhttps://bucketname.storage.googleapis.com/objectname

ACL を編集する権限が拒否されました

FULL_CONTROLオブジェクトの ACL を表示できるのは、オブジェクトを所有するユーザーまたはオブジェクトの所有者だけです。オブジェクトはサービス アカウントによって所有されているようですが、アカウントFULL_CONTROLにはオブジェクトがないため、ACL を表示できません。バケットを使用しているユーザーはFULL_CONTROL常にバケット内のオブジェクトを削除できるため、引き続きオブジェクトを削除できます。

于 2013-06-12T21:06:37.727 に答える
0

関連メモ: blobstore API を直接使用して画像を GCS にアップロードすることで、CPU コストを削減できると思います。 https://developers.google.com/appengine/docs/java/blobstore/#using-blobstore-with-gcs

于 2013-06-13T01:23:17.420 に答える