TypeScript环境下Multer多图上传报ERR_INVALID_ARG_TYPE错误求助
解决TypeScript下Multer多图上传时fs.unlink抛出的ERR_INVALID_ARG_TYPE错误
问题根源
你遇到的错误是因为在全局错误处理中间件中,直接将req.files(一个数组)传给了fs.unlink,而fs.unlink仅接受单个文件路径字符串/Buffer/URL作为第一个参数,无法处理数组类型。
当使用multer.array("files")处理多文件上传时,req.files会是Express.Multer.File[]类型的数组,而非单个文件对象,这就导致了类型不匹配的错误。
解决方案
需要遍历req.files数组,对每个文件单独调用fs.unlink。同时要为req.files添加正确的TypeScript类型断言,避免类型歧义。
修改后的代码(server.ts错误处理中间件)
app.use((err: Error, req: Request, res: Response, next: NextFunction) => { // 类型断言:将req.files转为Express.Multer.File数组或undefined const uploadedFiles = req.files as Express.Multer.File[] | undefined; if (uploadedFiles) { // 遍历数组,逐个删除已上传的文件 uploadedFiles.forEach(file => { fs.unlink(file.path, () => {}); }); } if (res.headersSent) { return next(err); } res.status((err as any).code || 500); res.json({ message: err.message || "SOMETHING WENT WRONG" }); });
额外说明
- 类型断言
as Express.Multer.File[] | undefined明确了req.files的类型,符合TypeScript的类型检查要求; - 取每个文件的
path属性传入fs.unlink,确保参数是单个文件路径字符串; - 对
err.code添加(err as any)类型断言,因为默认Error类型不包含自定义的code属性。
内容的提问来源于stack exchange,提问作者huzaifac137
相关产品推荐
相关产品推荐

