首页 > 解决方案 > 如何设置字段名称以上传文件单/数组 Multer NodeJs

问题描述

我有一个使用 multer 和 sharp 在 nodejs 中上传图像的代码。但我想问如何在第 19 行设置动态数组名称?我想从 nodejs 路由中设置该数组名称,因为我在 mongodb 集合中的字段名称在每个集合中都不同。

这是我的中间件上传代码:

const multer = require("multer");
const sharp = require("sharp");

const multerStorage = multer.memoryStorage();

const multerFilter = (req, file, cb) => {
  if (file.mimetype.startsWith("image")) {
    cb(null, true);
  } else {
    cb("Please upload only images.", false);
  }
};

const upload = multer({
  storage: multerStorage,
  fileFilter: multerFilter
});

const uploadFiles = upload.array("images", 10); //Change this 'images' name from route

const uploadImages = (req, res, next) => {
  uploadFiles(req, res, err => {
    if (err instanceof multer.MulterError) {
      if (err.code === "LIMIT_UNEXPECTED_FILE") {
        return res.send("Too many files to upload.");
      }
    } else if (err) {
      return res.send(err);
    }

    next();
  });
};

const resizeImages = async (req, res, next) => {
  if (!req.files) return next();

  req.body.images = [];
  await Promise.all(
    req.files.map(async file => {
      const filename = file.originalname.replace(/\..+$/, "");
      const newFilename = `cariboss-${filename}-${Date.now()}.jpeg`;

      await sharp(file.buffer)
        .resize(640, 320)
        .toFormat("jpeg")
        .jpeg({ quality: 90 })
        .toFile(`uploads/${newFilename}`);

      req.body.images.push(newFilename);
    })
  );

  next();
};

const getResult = async (req, res) => {
  if (req.body.images.length <= 0) {
    return res.send(`You must select at least 1 image.`);
  }

  const images = req.body.images
    .map(image => "" + image + "")
    .join("");

  return res.send(`Images were uploaded:${images}`);
};

module.exports = {
  uploadImages: uploadImages,
  resizeImages: resizeImages,
  getResult: getResult
};

在此处输入图像描述

我的路线代码:

module.exports = app => {
    const articles = require("../controllers/articles.controller.js");
    const upload = require("../middlewares/upload");
  
    var router = require("express").Router();
  
    router.post("/", upload.uploadImages, upload.resizeImages, upload.getResult, articles.create);
  
    app.use("/api/article", verifyToken, router);
  };

我已经在互联网上搜索了解决方案,但什么也没有。谢谢你的帮助先生。

标签: javascriptnode.jsmongodb

解决方案


推荐阅读