Загрузить объект из хранилища GCP, используя NodeJS - PullRequest
0 голосов
/ 22 января 2020

Я использую @ google-cloud / storage для доступа к объектам внутри корзины Google Cloud Storage из приложения узла, но я не могу заставить его работать.

I ' мы создали служебную учетную запись на консоли GCP и присвоили ей роль Storage Admin , но при попытке получить файл я получаю следующее сообщение:

service-account-user@my-project-5411148.iam.gserviceaccount.com не имеет права на хранение. Унаследованная аннотация , и я не установил никаких специфических c разрешений для объектов.

Мой код выглядит следующим образом:

const { Storage } = require('@google-cloud/storage');
const config = require('./config');
const storage = new Storage({ 'keyFilename': config.configFullPath('gcloud') });

const privateBucket = storage.bucket('my-bucket-45826813215'); 

let objectDownload = async (filename) => {
    let file = privateBucket.file(filename);
    let result = await file.download();
    return result;
}

objectDownload('some-object')
    .then(() => {
        console.log('Done');
    })
    .catch((err) => {
        console.log(err.message);
    });

Любые идеи о том, что я делаю неправильно?

1 Ответ

2 голосов
/ 23 января 2020

Я могу загрузить файл с Storage Admin Role. Ниже приведен процесс, которому я следовал

1. Создать проект enter image description here

2. Go в IAM и выберите учетную запись службы

enter image description here

3. Выберите создать учетную запись enter image description here

4. выберите роль для учетной записи службы enter image description here

5. Создать ключ

enter image description here enter image description here enter image description here

Ниже работает код:

const path = require('path');
const {Storage} = require('@google-cloud/storage');


async function test() {

const serviceKey = path.join(__dirname, './keys.json')


const storageConf = {keyFilename:serviceKey}

const storage = new Storage(storageConf)

const downlaodOptions = {
      destination: __dirname+'/test.jpg'
    };

    try {
    let res =await storage
      .bucket('storage1232020')
      .file('test.jpg')
      .download(downlaodOptions); 
   }
   catch(err){
    console.log(err)
   }

}

test()

Примечание : убедитесь, что

  1. Сервисная учетная запись и корзина созданы в рамках проекта. Например, я создал учетную запись и учетную запись для проекта storage-dem01232020

  2. Вы правильно передаете ключ к коду

...