【问题标题】:Attach metadata infos to a Gridfs document file via req.query in API - Node.js Expresss.js MongoDB Multer Gridfs stream通过 API 中的 req.query 将元数据信息附加到 Gridfs 文档文件 - Node.js Expresss.js MongoDB Multer Gridfs 流
【发布时间】: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


    【解决方案1】:

    我正在使用此代码向 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}
          };
        },
      });
    

    如您所见,使用您返回的元数据作为您在文件中返回的对象的属性:section。

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 2014-08-07
      • 2015-07-18
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 2020-11-27
      相关资源
      最近更新 更多