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

NodeJS向C# WCF传输PDF文件异常:生成文件仅1KB

问题分析与解决方案

看起来你遇到的核心问题是NodeJS请求发送时没有正确生成带边界的multipart/form-data头部,导致WCF服务无法正确解析文件流,把整个multipart请求体(包括边界、文件头部信息)都当成了文件内容写入,最终生成的1KB文件就是这些额外信息。

为什么Insomnia正常,NodeJS不行?

Insomnia会自动为multipart/form-data请求生成包含边界值的Content-Type头部(比如multipart/form-data; boundary=----WebKitFormBoundaryxxxx),而你的NodeJS代码手动设置了Content-Type: multipart/form-data,覆盖了request模块自动生成的带边界的头部。WCF服务没有边界标识,就无法区分请求体中的文件部分和其他内容,只能把整个请求体当作文件流写入。

解决方案一:修复Request模块的请求代码

直接移除手动设置的Content-Type头部,让request模块自动生成正确的带边界的头部:

const formData2 = { file: fs.createReadStream(reportFile) };
request.post({
  url: urlSend, // 确保urlSend已经包含arg1~arg5的URL参数,比如`http://your-wcf-host/uploadFileReport?arg1=xxx&arg2=xxx&arg3=xxx&arg4=xxx&arg5=report.pdf`
  formData: formData2,
  // 不要手动设置Content-Type!request会自动生成`multipart/form-data; boundary=xxx`
}, function(error, response, body) {
  if (error) {
    console.error('请求失败:', error);
    return;
  }
  console.log('服务响应:', body);
});

解决方案二:改用Axios发送请求(备选)

如果更倾向于使用Axios,需要借助form-data库来生成正确的请求头部:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const formData = new FormData();
formData.append('file', fs.createReadStream(reportFile));

axios.post(urlSend, formData, {
  headers: formData.getHeaders(), // 自动生成带边界的Content-Type头部
  params: {
    // 这里可以直接传递arg1~arg5参数,Axios会自动拼接到URL上
    arg1: 'your-value-1',
    arg2: 'your-value-2',
    arg3: 'your-value-3',
    arg4: 'your-value-4',
    arg5: 'custom-report.pdf'
  }
})
.then(response => {
  console.log('服务响应:', response.data);
})
.catch(error => {
  console.error('请求出错:', error);
});

额外验证点

  1. 确认URL参数传递正确:WCF接口的UriTemplate要求arg1~arg5作为URL参数传递,确保你的urlSend包含这些参数,或者在请求中通过params(Axios)/手动拼接(Request)传递。
  2. 对比请求头:可以用Charles或Fiddler抓包,对比Insomnia和NodeJS请求的Content-Type头部,确认NodeJS请求的头部包含boundary标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:07:44