使用NestJs与Multer上传文件到AWS S3报buffer未定义错误如何解决
问题排查方案
1. 修复Axios请求配置错误
你当前的Axios传参写法错误,请求头需要放到config的headers字段下,直接展开到config根层级会导致请求头不生效,后端无法正确解析multipart/form-data格式的请求体,自然拿不到上传的文件。
修复后的请求代码:
let formData = new FormData(); formData.append("file", fs.createReadStream(path.join(__dirname, `./uploads/${uploadedFileName}.jpg`)), file.data.originalname); const response = await axios.post("my_url", formData, { headers: { ...formData.getHeaders(), } });
2. 确认Nest端依赖与配置完整
- 确保你已经安装了multer的类型声明包:
npm i -D @types/multer,缺失类型声明可能会导致文件解析逻辑异常 FileInterceptor默认使用内存存储,文件才会带有buffer属性;如果你自行配置了磁盘存储,需要改回内存存储,或者读取磁盘上的临时文件内容再上传到S3
3. 校验字段匹配与文件有效性
- 确认后端
FileInterceptor('file')的第一个参数,和前端formData.append的第一个参数完全一致,大小写、拼写都不能有偏差 - 确认你读取的本地文件路径正确、有读取权限,避免
fs.createReadStream返回空流,导致没有有效文件上传 - 可以在后端接口内注入Request对象,打印
req.file确认是否真的没有拿到上传文件,快速定位是解析问题还是前端上传问题
4. 确认Node环境下的FormData依赖
如果你是在Node.js服务端发送的请求,需要单独安装form-datanpm包,不能直接使用浏览器环境的FormData API,否则会导致formdata序列化异常,后端无法解析。安装命令:npm i form-data
内容的提问来源于stack exchange,提问作者Yashwanth Kata
相关产品推荐
相关产品推荐

