,可以通过以下步骤实现:
const express = require('express');
const multer = require('multer');
const GridFsStorage = require('multer-gridfs-storage');
const mongoose = require('mongoose');
const Grid = require('gridfs-stream');
const crypto = require('crypto');
const mongoURI = 'mongodb://localhost:27017/mydatabase'; // 替换为你的MongoDB连接URI
const conn = mongoose.createConnection(mongoURI);
let gfs;
conn.once('open', () => {
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads'); // 创建一个名为'uploads'的集合用于存储文件
});
const storage = new GridFsStorage({
url: mongoURI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'uploads' // 与上面创建的集合名称一致
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
const router = express.Router();
router.post('/upload', upload.single('file'), (req, res) => {
res.json({ file: req.file });
});
app.use('/api', router);
现在,你可以通过发送POST请求到/api/upload
来上传文件。请求中的文件将被保存到MongoDB的GridFS中,并返回一个包含文件信息的JSON响应。
这是一个使用MongoDB和GridFS保存缓冲区的基本示例。你可以根据自己的需求进行修改和扩展。请注意,这只是一个简单的示例,实际应用中可能需要更多的错误处理和安全性措施。
推荐的腾讯云相关产品:腾讯云数据库MongoDB、腾讯云对象存储COS。
腾讯云数据库MongoDB产品介绍链接地址:https://cloud.tencent.com/product/cmongodb
腾讯云对象存储COS产品介绍链接地址:https://cloud.tencent.com/product/cos
领取专属 10元无门槛券
手把手带您无忧上云