You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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" });
});

额外说明

  1. 类型断言as Express.Multer.File[] | undefined明确了req.files的类型,符合TypeScript的类型检查要求;
  2. 取每个文件的path属性传入fs.unlink,确保参数是单个文件路径字符串;
  3. 对err.code添加(err as any)类型断言,因为默认Error类型不包含自定义的code属性。

内容的提问来源于stack exchange,提问作者huzaifac137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:45:50