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

如何使用Node.js的request库发送文件?解决文件上传ERR_STREAM_WRITE_AFTER_END错误

问题原因

  • 你的curl请求是直接将ZIP文件二进制内容作为请求体传输,并非multipart/form-data表单上传,代码中同时配置body和formData两个参数产生冲突,导致请求流关闭后还尝试写入表单数据,抛出write after end错误。
  • @文件路径是curl专属语法,Node.js的request库不会识别该语法自动读取本地文件,你将该字符串赋值给body的写法是无效的。

修复后的代码

const fs = require('fs');
const request = require('request');

const zipPath = '/Users/aitplap24/Desktop/WebGIS/uploads/users/61adbbe3ececf2068d6eb862/1638776276622.zip';

var options = {
    url: 'http://localhost:8080/geoserver/rest/workspaces/61adbbe3ececf2068d6eb862/datastores/test1/file.shp',
    method: 'PUT',
    headers: {
        'Content-type': 'application/zip'
    },
    // 直接传入文件读取流作为请求体,和curl --data-binary效果一致
    body: fs.createReadStream(zipPath),
    auth: {
        'user': 'admin',
        'pass': 'geoserver'
    }
};

request(options, (error, response, body) => {
    console.log(error, response, body);
});

补充说明

如果文件体积较小,也可以用fs.readFileSync(zipPath)读取为Buffer传入body参数,效果一致。另外request库已经停止维护,生产环境建议替换为axios、node-fetch等仍在迭代的HTTP请求库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:05