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

为什么Node.js http服务直接pipe请求时会写入form-data头部到文件?

两段代码的核心差异

两段代码处理的请求Content-Type类型完全不同,直接决定了HTTP请求体的内容格式:

  • 测试代码处理的是multipart/form-data类型的请求:你使用curl的-F参数发起请求时,curl会自动把请求体封装为multipart表单格式,这类格式本身就包含边界分隔符、每个表单字段的描述头(比如Content-Disposition)、字段内容,最后还有结束边界。你直接把原生req的整个请求体pipe到文件,自然会把这些表单结构信息一起写入。
  • 旧图片上传接口处理的是image/*类型的二进制请求:代码里req.is("image/*")的校验逻辑已经说明,这个接口只接收请求体直接为图片二进制的请求,没有经过multipart表单封装,整个请求体本身就是纯净的图片内容,pipe之后自然不会有多余信息。

解决方案

如果需要从multipart/form-data请求中提取单独的文件内容,不能直接pipe整个req对象,需要先引入multer、busboy这类multipart解析工具,解析后拿到对应字段的文件流再写入目标文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:03