Файлы в корзине с «Общедоступным доступом», установленным в «Общедоступный доступ в Интернет», не могут быть просмотрены

# #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:

enter image description here

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?