使用 multer 将图像上传到 Firebase 存储问题
Posted
技术标签:
【中文标题】使用 multer 将图像上传到 Firebase 存储问题【英文标题】:Upload image using multer to Firebase Storage issue 【发布时间】:2019-08-31 05:29:20 【问题描述】:您好,我正在尝试使用 Node.js/multer 将图像上传到 firebase 存储(注意:我知道我可以在客户端执行此操作,但这需要在服务器端工作)。我遇到了这个问题:
TypeError: storage.ref 不是函数
我尝试通过添加 import 'firebase/storage';
来解决问题,正如其他 Stack Overflow 所建议的那样,但这并没有奏效。
路由器:
import FirebaseManager, FirebaseReferences from '../database_manager';
router.post("/:uuid/image", upload.single("file"), (req, res) =>
const tempPath = req.file.path;
const ext = path.extname(req.file.originalname).toLowerCase();
if (ext === ".png" || ext === ".jpg")
FirebaseManager.upload_image(FirebaseReferences.Images, 'test', req.file)
res.status(200).contentType("text/plain").end("File uploaded!");
else
try
fs.unlinkSync(tempPath);
catch (err)
res.status(400).send(err.message);
res.status(403).contentType("text/plain").end("Only .png/jpg files are allowed!");
);
Firebase 管理器:
var admin = require('firebase-admin');
import firebase = require('firebase/app');
import 'firebase/database';
import 'firebase/storage';
// Access the real-time database in the initialized application.
const FirebaseApp: firebase.app.App = admin.initializeApp(
credential: admin.credential.cert(
projectId: '',
clientEmail: '',
privateKey: ''
),
databaseURL: 'https://.firebaseio.com'
);
const db: firebase.database.Database = FirebaseApp.database();
const storage: firebase.storage.Storage = FirebaseApp.storage();
export function upload_image(ref: FirebaseReferences, filename: string,
file: any): string
var upload_loc = ref.toString() + '/' + filename;
var upload_ref = storage.ref().child(upload_loc);
upload_ref.put(file).then(function(snapshot)
snapshot.ref.getDownloadURL().then(function(downloadURL)
console.log('File available at', downloadURL);
return downloadURL;
);
, function(error)
console.log("FirebaseManager, upload_image(): " + error);
throw error;
);
return 'error';
还可以将Express.Multer.File
类型上传到存储吗?如果不是,我如何将该类型转换为 File
类型?
node 10.2.1
multer 1.4.1
firebase ^5.7.3
firebase-admin ^6.5.0
【问题讨论】:
看起来它在您的 upload_image 函数中的存储对象上找不到ref
。我不完全确定您是否需要先调用存储桶。此外,我过去在导出函数之外定义了 express 和 code 时遇到了一些问题。您能否在您的upload_image 函数中不调用storage.ref()
,而是尝试调用admin.storage().bucket().ref()
?
【参考方案1】:
admin.initializeApp
的配置中缺少 storageBucket
admin.initializeApp(
credential: admin.credential.cert(serviceAccount),
storageBucket: "<BUCKET_NAME>.appspot.com"
);
https://firebase.google.com/docs/storage/admin/start
【讨论】:
以上是关于使用 multer 将图像上传到 Firebase 存储问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Multer 将带有 fetch 的图像上传到 Express
如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?
使用 Multer 将图像上传到 mongoDB 时 Heroku 出错