Невозможно сделать файл gs: // общедоступным для обслуживания напрямую из Google Storage - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу иметь возможность обслуживать файлы изображений непосредственно из Google Storage.Я следую совету по коду от Google , но я все еще получаю Access Denied и Anonymous caller does not have storage.objects.get access.Я запускаю это в своем проекте Google App Engine:

require_once 'vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;
use google\appengine\api\cloud_storage\CloudStorageTools;

$storage = new StorageClient();
$storage->registerStreamWrapper();

$text = "Contained text: ".date("Y-m-d H:i:s")."\n";

$options = ['gs' => ['acl' => 'public-read']];
$context = stream_context_create($options);
$filepath = "gs://$project.appspot.com/public_file.txt";
file_put_contents($filepath, $text, 0, $context);

$publicurl = CloudStorageTools::getPublicUrl($filepath, false);

Файл успешно записывается в Google Storage.Я смотрел на это через браузер хранилища в облачной консоли.

Но когда я пытаюсь перейти к нему, я получаю Access Denied.Чего мне не хватает?

enter image description here

$ gsutil acl get gs://my-app-project.appspot.com/public_file.txt

[
  {
    "entity": "project-owners-XXXXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXXXX",
      "team": "owners"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-editors-XXXXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXXXX",
      "team": "editors"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-viewers-XXXXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXXXX",
      "team": "viewers"
    },
    "role": "READER"
  },
  {
    "email": "my-app-project@appspot.gserviceaccount.com",
    "entity": "user-my-app-project@appspot.gserviceaccount.com",
    "role": "OWNER"
  }
]

1 Ответ

0 голосов
/ 06 января 2019

Я не уверен, почему приведенный выше код не работает для установки разрешений для public, но здесь есть обходной путь.

Если вы используете корзину, которая может быть полностью публичной, то что выможно сделать так: установить ACL по умолчанию для корзины на public-read, тогда всякий раз, когда вы создаете файлы в этой корзине, они уже будут открытыми.

Вот откуда я получил команду: https://cloud.google.com/php/getting-started/using-cloud-storage

gsutil defacl set public-read gs://[YOUR-PROJECT-ID]

...