在 Node-RED 中发送 multipart/form-data
类型的 HTTP POST 请求,通常需要使用 http
或 https
节点,并正确设置请求头和消息体。以下是详细的步骤和示例,帮助你实现这一功能。
http
节点和 form-data
库form-data
库
首先,你需要在 Node-RED 的运行环境中安装 form-data
库。这通常可以通过在 Node-RED 的终端或命令提示符中运行以下命令完成:
npm install form-datamultipart/form-data
。function
节点:
在 function
节点的代码编辑区域,添加以下代码以构建 multipart/form-data
:
const FormData = require('form-data'); const form = new FormData(); // 添加文本字段 form.append('field1', 'value1'); form.append('field2', 'value2'); // 添加文件 form.append('file', { value: Buffer.from('文件内容'), // 可以替换为实际文件内容或使用流 options: { filename: 'example.txt', contentType: 'text/plain' } }); // 将表单数据转换为字符串 const formDataString = form.toString(); // 设置消息体 msg.headers = { 'Content-Type': form.getHeaders() }; msg.payload = formDataString; return msg;
注意:msg.headers
中的 Content-Type
包含 boundary
,form.getHeaders()
会自动处理。http request
节点:http request
节点的设置中:POST
。http://example.com/upload
。Content-Type
,因为已在 function
节点中设置。raw
并确保编码为 UTF-8
。inject
节点,观察 http request
节点的响应。request
库(适用于较旧的 Node-RED 版本)如果你使用的是较旧的 Node-RED 版本,可能需要使用 request
库来构建和发送 multipart/form-data
请求。
request
和 form-data
库
npm install request form-datainject
、function
和 http request
节点,类似于方法一。function
节点中使用 request
发送请求:
const request = require('request'); const FormData = require('form-data'); const form = new FormData(); form.append('field1', 'value1'); form.append('file', fs.createReadStream('/path/to/file')); msg.payload = form; request.post({ url: 'http://example.com/upload', headers: form.getHeaders(), multipart: form }, function (err, resp, body) { if (err) { msg.error(err); } else { msg.payload = body; } return msg; }); return msg;注意:request
库已被标记为不再维护,建议使用方法一中的 http
节点结合 form-data
库。
Content-Type
头部正确设置,包含 boundary
参数。UTF-8
编码,确保与服务器端一致。http request
节点中添加错误处理逻辑,以便调试和处理失败的请求。领取专属 10元无门槛券
手把手带您无忧上云