multer:如何将变量传递给下一个处理程序?

问题描述 投票:0回答:1

我用的是 multer 来上传图片。以下是我的multer配置。

import multer from "multer";
import * as mime from "mime-types";
import path from "path";

export const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "uploads/");
  },
  filename: function (req: any, file, cb) {
    const name = path.parse(file.originalname).name + "_" + Date.now();
    const extension = mime.extension(file.mimetype);
    const filename = `${name}.${extension}`;
    /**
    req.fileInfo = {
      filename,
      name,
      extension
    } */
    cb(null, filename);
  },
});
export const upload = multer({ storage: storage });

我想得到 fileInfo 对象的下一个处理程序中。

import { upload } from "src/middlewares/imageUpload";

router.post('/imageUpload', upload.single("upload"), async (req, res) => {

//
const filename = req.fileInfo.filename;

});

根据这个 回答, res.local 是中间件和处理程序之间存储变量的正确位置。

但multer diskStorage的配置不接受 res 参数。我试着把 fileInfo 对象 req 但有时能用,有时不能用(req.fileInfo对于某些路由来说是未定义的,尽管代码完全一样)。

我怎样才能把 fileInfo 到下一个处理程序?

javascript typescript express middleware multer
1个回答
1
投票

multer 中间件会自动设置名为 filereq 对象,它包含了上传文件的信息,可以在下一个中间件中被访问,所以你不需要自己设置它。

如果您还想这样做,您可以在文件中附加 fileInfo 反对 req 对象,但它只能在下一个处理程序中使用,其中的 multer 中间件是中间件之一。所以 req.fileInfo 对于请求不通过的路由,将不定义。multer 中间件。

你可以让每个请求都通过 multer 中间件,但如果该请求不包含任何应该上传的文件。req.fileInfo 将是未定义的,因为multer不会上传任何文件。

© www.soinside.com 2019 - 2024. All rights reserved.