NodeJS中Express+Multer收发图片Buffer时req.file为undefined如何解决
问题修复方案
你代码里共有三处配置错误,按优先级修改即可:
- 字段名不匹配
服务端upload.single('image')指定了仅解析名为image的文件字段,但客户端formData里的文件字段名为file,字段名对不上导致Multer识别不到文件,req.file返回undefined。
修复二选一:- 把服务端代码改为
upload.single('file') - 把客户端formData里的
file: buffer改为image: buffer
- 把服务端代码改为
- 手动设置了错误的请求头
multipart/form-data请求头必须附带boundary边界符参数才能正常解析表单内容,你手动设置了该请求头但没有加boundary参数,反而覆盖了request库自动生成的合法请求头。
修复方法:直接删掉客户端POST请求配置里的headers块即可,request库传入formData参数时会自动生成带正确boundary的请求头。 - 冲突的端口配置
客户端POST请求的url已经明确写了端口5050,额外加的port: 443属于冲突无效配置,建议直接删掉避免请求异常。
修正后客户端示例代码
var buffer = await new Promise( (rs,rj) =>{ request({ url : 'domain.com/someimage.jpeg', method : 'get', encoding: null },function(error, response, body){ rs(body) }) }) request({ method : 'POST', url : 'http://localhost:5050/upload', formData : { file_name : 'name.jpg', image : buffer // 字段名和服务端upload.single的参数保持一致 } })
修改完成后服务端就能正常打印req.file的内容了。
内容的提问来源于stack exchange,提问作者Kathy
相关产品推荐
相关产品推荐

