我最终从 Firebase Admin SDK 实现了 Firebase 存储,并使用 Multer 将图像存储在内存中,直到我将它们加载到 Firebase。
https://firebase.google.com/docs/storage/admin/start
const uploader = multer({
storage: multer.memoryStorage(),
limits: {
fileSize: 5 * 1024 * 1024,
},
});
// @route POST api/users/upload/avatar
// @desc Upload a new avatar and save to storage
// @access Private
router.post('/upload/avatar', [auth, uploader.single('image')], async (req, res, next) => {
if (!req.file) {
res.status(400).json({ msg: 'No file submitted.' });
return;
}
try {
const blob = firebase.bucket.file(req.file.originalname);
const blobStream = blob.createWriteStream({
gzip: true,
resumable: false,
metadata: {
contentType: req.file.mimetype,
},
});
blobStream.on('error', (err) => next(err));
blobStream.on('finish', () => {
publicUrl = `https://firebasestorage.googleapis.com/v0/b/${
firebase.bucket.name
}/o/${encodeURI(blob.name)}?alt=media`;
res.status(200).json({
photoURL: publicUrl,
});
User.findById(req.user.id).then((user) => {
user.photoURL = publicUrl;
user.save();
});
});
blobStream.end(req.file.buffer);
} catch (error) {
console.error(error.message);
res.status(500).send({ msg: 'A Server error occurred' });
}
});
认为如果将来有人偶然发现这篇文章,这可能会有所帮助。