gpt4 book ai didi

javascript - 通过 API 中的 req.query 将元数据信息附加到 Gridfs 文档文件 - Node.js Expresss.js MongoDB Multer Gridfs 流

转载 作者:可可西里 更新时间:2023-11-01 10:46:18 27 4
gpt4 key购买 nike

在将元数据信息实际存储到 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 上传的每个文件。谢谢你们。

最佳答案

我正在使用此代码将一些信息添加到 fs.files 集合的元数据

state.storage = multerGridfs({
url: mongoServerUrl,
db: db.connection,
file: (req, file) => {
logger.info(`Uploading file: ${file.originalname} for account ${req.params.accountId}`);
return {
filename: file.originalname,
metadata: { accountId: req.params.accountId}
};
},
});

如您所见,使用元数据将其作为在 file: 部分中返回的对象的属性返回。

Mongo Compass entry for added file

这是一些很好的例子的链接 https://www.npmjs.com/package/multer-gridfs-storage .

希望对你有帮助

关于javascript - 通过 API 中的 req.query 将元数据信息附加到 Gridfs 文档文件 - Node.js Expresss.js MongoDB Multer Gridfs 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51677687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com