javascript - multer:如何将变量传递给下一个处理程序
问题描述
我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
给下一个处理程序?
解决方案
multer
中间件会自动设置objectfile
上的属性,该属性req
包含上传文件的信息,可以在下一个中间件中访问,所以你不需要自己设置它。
如果您仍然想这样做,您可以将fileInfo
对象附加到req
对象,但它仅在multer
中间件是管道中的中间件之一的下一个处理程序中可用。因此req.fileInfo
,对于请求不通过multer
中间件的路由,将是未定义的。
您可以使每个请求都通过multer
中间件,但如果该请求不包含任何应上传的文件,req.fileInfo
则将未定义,因为multer
.
推荐阅读
- r - 如何在我的数据框上使用完整连接并重命名具有相同名称 R 的列
- javascript - 如何在后端 js 代码中使用 emscripten 生成的 cpp 类?
- shopware - 如何在 Shopware 6 中访问自定义 cms 元素配置值?
- android - 扫描特定 BLE 设备的问题
- python - 二分搜索算法 - 项目思路
- python - 无法使用云运行在 Firebase 中托管烧瓶
- python - AttributeError:“成员”对象没有属性“通道”
- amazon-s3 - 如何知道lambda图像压缩是否完成?
- aws-api-gateway - 如何在 AWS Gateway API 中控制用户对路由的访问
- python - 在 python 中使用 webbrowser 模块打开网站时出错