Node.js 错误:匿名调用方没有storage.objects.get访问Google云存储对象Nodejs API
我试图按照教程在firebase中添加图像。我试着用NodeJS语法重写代码。代码工作正常,我在firebase中有我的图片,但图像无法显示,链接通知错误。下面是我的最终代码。 Middleware.jsNode.js 错误:匿名调用方没有storage.objects.get访问Google云存储对象Nodejs API,node.js,api,firebase-storage,Node.js,Api,Firebase Storage,我试图按照教程在firebase中添加图像。我试着用NodeJS语法重写代码。代码工作正常,我在firebase中有我的图片,但图像无法显示,链接通知错误。下面是我的最终代码。 Middleware.js const googleStorage = require('@google-cloud/storage'); const Rest = require('../utils/Restware') const {format} = require('util'); const storage
const googleStorage = require('@google-cloud/storage');
const Rest = require('../utils/Restware')
const {format} = require('util');
const storage = googleStorage({
projectId: 'my-project-id',
keyFilename: 'D:/nodejs/project/app/config/serviceAccountKey.json'
});
const bucket = storage.bucket("my-bucket-link");
const getImage = function(req, res, callback) {
let file = req.file;
uploadImageToStorage(file, function (errorCode, errorMessage, httpCode, errorDescription, result) {
if (errorCode) {
return Rest.sendError(res, errorCode, errorMessage, httpCode, errorDescription);
}
return Rest.sendSuccessOne(res, result, httpCode);
})
}
/**
* Upload the image file to Google Storage
* @param {File} file object that will be uploaded to Google Storage
*/
const uploadImageToStorage = (file, callback) => {
try {
let newFileName = `${Date.now()}_${file.originalname}`;
let fileUpload = bucket.file(newFileName);
const blobStream = fileUpload.createWriteStream({
metadata: {
contentType: file.mimetype
}
});
blobStream.on('error', (error) => {
return callback(1, error, 422, null, null);
});
blobStream.on('finish', () => {
// The public URL can be used to directly access the file via HTTP.
const url = format(`https://storage.googleapis.com/${bucket.name}/${fileUpload.name}`);
return callback(null, null, 200, null, url);
});
blobStream.end(file.buffer);
} catch(error) {
return false;
}
}
module.exports = {getImage}
这是server.js
const Express = require('express');
const Image = require('../middlewares/UploadToFirebase')
let App = Express();
const Multer = require('multer');
const multer = Multer({
storage: Multer.memoryStorage(),
limits: {
fileSize: 5 * 1024 * 1024
}
});
App.post('/v1/upload', multer.single('file'), Image.getImage);
当我在《邮递员》中运行它时,它会通知
{
"data": "https://storage.googleapis.com/project-9e319.appspot.com/1603876183998_9cHg9fYPW3WoRzeZoaHp8X.png",
"message": "",
"result": "ok"
}
然而,当我在firebase登记时
当我点击图片链接时
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.</Details>
</Error>
有人知道我错过了哪些步骤吗?如果需要更多信息,一定要通知我。谢谢