# #node.js #google-cloud-storage
Вопрос:
У меня есть ведро, в котором я храню несколько фотографий для своего веб-сайта.
Мой код
Перед загрузкой я получаю изображения в файле сопоставления объектов JSON с данными base64:
{
"picture1": "base64....",
"picture2": "base64...."
}
Затем я использую клиентскую библиотеку nodejs для загрузки данных. Схема, которой я следую, такова:
const storageClient = new Storage({
projectId: GOOGLE_PROJECT_ID,
keyFilename: GOOGLE_APPLICATION_CREDENTIALS,
})
const iconsBucket = storageClient.bucket(ICONS_BUCKET!)
// (in the code function that uploads a single picture)
// iconImageData is base64 png
const { webName, iconImageData } = args
const filename = `${webName}.png`
const iconImageFile = iconImagesBucket.file(filename)
const imageBuffer = Buffer.from(iconImageData, 'base64')
return iconImageFile
.save(imageBuffer, {
contentType: 'image/png',
validation: 'md5',
public: true,
metadata: {
contentType: 'image/png',
},
predefinedAcl: 'publicRead',
})
.then(() => {
childLogger.debug({
msg: 'Uploaded icon image to bucket',
itemId,
filename,
})
batchReport.nIconsUploaded = 1
})
.catch(err => {
childLogger.error({
msg: 'Failed to upload icon image to bucket',
itemId,
filename,
err,
})
batchReport.nIconsFailed = 1
})
Когда я запускаю приведенный выше код, все загрузки кажутся успешными.
Мое ведро
Мое хранилище-это однорегиональное стандартное хранилище с включенными мелкозернистыми списками управления доступом. Мне пришлось включить детализированные списки управления доступом из-за этой проблемы с клиентской библиотекой при загрузке данных в качестве base64: https://github.com/googleapis/nodejs-storage/issues/1230
Я дал Storage Object Viewer
разрешение на то, чтобы allUsers
в ведре:
When looking at the picture in the bucket, its permissions say «Public Access»: «Public to internet», however the picture does not load below:
The image is also not accessible by the public URL.
If I attempt to Edit Permissions
for the picture in the GUI, I am told:
my-email@example.com does not have storage.objects.getIamPolicy access to the Google Cloud Storage object.
How can I make the picture uploaded by my code publically viewable?
How come setting public: true
and predefinedAcl: 'publicRead'
does not have the desired effect?