мы используем @google-cloud/storage
@ 2.3.1
и хотим сделать загруженные файлы общедоступными.
Мы создаем наши объекты File, используя метод createWriteStream
, как показано в этом примере:
gcFile.createWriteStream({
predefinedAcl: 'publicRead',
});
Однако в файле все еще отображается Not public
в столбце Public access
:
Мы решили попробовать логическое значение public
при создании потока согласно API-ссылка (которая на самом деле является псевдонимом для вышеупомянутого) - файл не является общедоступным:
gcFile.createWriteStream({
public: true,
});
Далее мы попытались сделать файл общедоступным, используяmakePublic
метод объекта File
:
const file = gcs.bucket('our_bucket_name').file('file_path_here');
await file.makePublic();
const acl = await file.acl.get();
console.log(acl);
Этот журнал регистрирует следующий ACL для объекта:
[
[
{
entity: 'owner@our-project-name.iam.gserviceaccount.com',
role: 'OWNER'
},
{
entity: 'allUsers',
role: 'READER'
}
],
{
kind: 'storage#objectAccessControls',
items:
[
[Object],
[Object]
]
}
]
Таким образом, похоже, что мы выполнили следующее условие задокументировано здесь :
The Access Control List (ACL) for the object includes an entry for
allUsers or allAuthenticatedUsers.
If these conditions are met, the public access column for the object
reads Public.`
Однако столбец по-прежнему читается Not public
.
. Хотя разрешения выглядят правильно, мы также проверили разрешения в облачной консоли, выполнив следующие действия: шаги, описанные здесь .
При редактировании разрешений четко указывается, что объект является общедоступным, однако в обзоре не отображается общедоступная ссылка?
Мы можем сделать файл общедоступным, установив публичный доступ на уровне Bucket, но нам очень нравится, что он находится на уровне отдельных объектов.Как мы можем заставить это работать?