【发布时间】: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()?
标签: node.js firebase firebase-storage multer