multer:如何将变量传递给下一个处理程序
multer: how to pass variables to next handler
我正在使用 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;
});
根据这个 answer,res.local
是在中间件和处理程序之间存储变量的正确位置。
但是 multer diskStorage 配置不接受 res
参数。我试图将 fileInfo
对象存储在 req
中,但有时它可以工作,有时它不起作用(req.fileInfo 对于某些路由未定义,尽管代码完全相同)。
如何将 fileInfo
传递给下一个处理程序?
multer
中间件自动在 req
对象上设置名为 file
的 属性 对象,该对象包含有关上传文件的信息,可以在下一个中间件中访问,因此不需要自己设置。
如果您仍想这样做,您可以将 fileInfo
对象附加到 req
对象,但它只会在下一个处理程序中可用,其中 multer
中间件是中间件之一在管线中。因此,对于请求不通过 multer
中间件的路由,req.fileInfo
将是未定义的。
您可以让每个请求都通过 multer
中间件,但如果该请求不包含任何应上传的文件,req.fileInfo
将是未定义的,因为 [=] 没有上传任何文件10=].
我正在使用 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;
});
根据这个 answer,res.local
是在中间件和处理程序之间存储变量的正确位置。
但是 multer diskStorage 配置不接受 res
参数。我试图将 fileInfo
对象存储在 req
中,但有时它可以工作,有时它不起作用(req.fileInfo 对于某些路由未定义,尽管代码完全相同)。
如何将 fileInfo
传递给下一个处理程序?
multer
中间件自动在 req
对象上设置名为 file
的 属性 对象,该对象包含有关上传文件的信息,可以在下一个中间件中访问,因此不需要自己设置。
如果您仍想这样做,您可以将 fileInfo
对象附加到 req
对象,但它只会在下一个处理程序中可用,其中 multer
中间件是中间件之一在管线中。因此,对于请求不通过 multer
中间件的路由,req.fileInfo
将是未定义的。
您可以让每个请求都通过 multer
中间件,但如果该请求不包含任何应上传的文件,req.fileInfo
将是未定义的,因为 [=] 没有上传任何文件10=].