Я хочу иметь возможность обслуживать файлы изображений непосредственно из 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
.Чего мне не хватает?
$ 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"
}
]