На моей локальной машине я работал над двумя разными проектами с разными учетными записями и т. Д. c, ни один из этих проектов не связан, поэтому.
Давайте представим, что два проекта имеют следующие электронные письма :
first-project@gmail.com second-project@gmail.com
Для второго проекта (second-project@gmail.com) я создал API, используя nodejs, где у меня есть конечная точка для загрузки файлов, поэтому я пытаюсь загрузить файл в корзину с помощью почтальона, конфигурация на моей конечной точке nodejs имеет идентификатор проекта учетной записи second-project@gmail.com, а также имя корзины, существующее в second-project@gmail.com, вот код моего файла загрузки:
const GCStorage = require('@google-cloud/storage');
const Multer = require('multer');
const CLOUD_BUCKET = 'mybucketname';
const storage = new GCStorage.Storage({
projectId: '1234657890'
});
const bucket = storage.bucket(CLOUD_BUCKET);
// Returns the public, anonymously accessable URL to a given Cloud Storage
// object.
// The object's ACL has to be set to public read.
// [START public_url]
function getPublicUrl(filename) {
return `https://storage.googleapis.com/${CLOUD_BUCKET}/${filename}`;
}
// [END public_url]
// Express middleware that will automatically pass uploads to Cloud Storage.
// req.file is processed and will have two new properties:
// * ``cloudStorageObject`` the object name in cloud storage.
// * ``cloudStoragePublicUrl`` the public url to the object.
// [START process]
function sendUploadToGCS(req, res, next) {
if (!req.file) {
return next();
}
const gcsname = Date.now() + req.file.originalname;
const file = bucket.file(gcsname);
const stream = file.createWriteStream({
metadata: {
contentType: req.file.mimetype
},
resumable: false
});
stream.on('error', err => {
req.file.cloudStorageError = err;
next(err);
});
stream.on('finish', () => {
req.file.cloudStorageObject = gcsname;
file.makePublic().then(() => {
req.file.cloudStoragePublicUrl = getPublicUrl(gcsname);
next();
});
});
stream.end(req.file.buffer);
}
// [END process]
// Multer handles parsing multipart/form-data requests.
// This instance is configured to store images in memory.
// This makes it straightforward to upload to Cloud Storage.
// [START multer]
const multer = Multer({
storage: Multer.MemoryStorage,
limits: {
fileSize: 5 * 1024 * 1024 // no larger than 5mb
}
});
// [END multer]
module.exports = {
getPublicUrl,
sendUploadToGCS,
multer
};
но я получаю следующую ошибку:
{
domain: 'global',
reason: 'forbidden',
message: 'first-project@gmail.com does not have storage.objects.create access to mybucketname/1578598638283DeveloperInPixelsLogo1.png.'
}
Как видите, сообщение содержит адрес электронной почты first-project@gmail.com Но это разные проекты и учетная запись, поэтому я могу ' Не понимаю, что здесь происходит, любая помощь, пожалуйста