【发布时间】:2023-03-17 01:26:01
【问题描述】:
在将元数据信息实际存储到 mongoDB 之前,我正在努力将元数据信息附加到 dfile。我正在使用:
const express = require("express");
const router = express.Router();
//File managing with gridfs
const mongoose = require('mongoose');
const path = require('path');
const crypto = require('crypto');
const multer = require('multer');
const GridFsStorage = require('multer-gridfs-storage');
const Grid = require('gridfs-stream');
const fs = require('fs');
作为库,然后作为存储引擎:
const conn = mongoose.createConnection(mongoURI);
//TODO : test the api for the files
let gfs;
conn.once('open', () => {
// Init stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
});
// Create storage engine
const storage = new GridFsStorage({
url: mongoURI,
gfs:gfs,
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);
});
});
},
metadata: (req, file, cb) => {
const metadata = {
originalname: file.originalname,
// get this information somehow
restaurantID :req.query.restaurantID,
category : req.query.category
};
cb(null, metadata);
}
});
const upload = multer({ storage: storage });
然后对于 post API,我没有那么多但只是一个代码来更新另一个 mongoDB 文档并引用有效的文件
router.post('/upload', upload.single("file"), (req, res) => {
//All the code to update
}
我需要一种方法来存储在 req.query 中传递的信息并将其放入 gridFS 文件集合的元数据中,以便进行一些查询以在将来找到正确的文件,然后将其保存。这适用于我使用此 API 上传的每个文件。谢谢各位。
【问题讨论】:
标签: javascript node.js mongodb file-upload gridfs