Я использую библиотеку хранилища google cloud nodejs для загрузки некоторых изображений в облачное хранилище. Это все отлично работает. Затем я пытаюсь сгенерировать подписанный URL-адрес сразу после загрузки файла, используя тот же объект хранения, который сначала загрузил файл, но я получаю следующую ошибку:
Request had insufficient authentication scopes
Я не уверен, почему это произойдет, если все они связаны с той же учетной записью службы, которая была загружена в первую очередь. (Для чего это стоит, это приложение Firebase).
Код ниже:
const Storage = require('@google-cloud/storage');
storage = new Storage();
storage.bucket(bucketName).upload(event.file.pathName, {
// Support for HTTP requests made with `Accept-Encoding: gzip`
gzip: true,
destination: gcsname,
metadata: {
// Enable long-lived HTTP caching headers
// Use only if the contents of the file will never change
// (If the contents will change, use cacheControl: 'no-cache')
cacheControl: 'public, max-age=31536000'
},
}).then(result => {
let url = `https://storage.googleapis.com/${bucketName}/${gcsname}`;
const options = {
action: 'read',
expires: Date.now() + 1000 * 60 * 60, // one hour
};
// Get a signed URL for the file
storage.bucket(bucketName).file(gcsname).getSignedUrl(options).then(result => {
console.log("generated signed url", result);
}).catch(err => {
console.log("err occurred", err)
})
})
Само хранилище не является общедоступным, равно как и объекты, но, насколько я понимаю, я все еще могу генерировать подписанный URL. Само приложение работает на GCP compute engine, следовательно, не передавая никакие параметры new Storage()
- фактически передача также приводит к сбою загрузки.
Может кто-нибудь посоветовать, что я делаю не так?