我正在尝试发送包含以下表单数据的多部分请求:
------WebKitFormBoundaryjFqPRXY6RQpdTRvE
Content-Disposition: form-data; name="file"; filename="Sample.csv"
Content-Type: application/vnd.ms-excel
------WebKitFormBoundaryjFqPRXY6RQpdTRvE
Content-Disposition: form-data; name="data"; filename="blob"
Content-Type: application/json
{"name":"Sample5","type":"Csv","firstRowIsHeader":true,"columns":[{ ... }]}
------WebKitFormBoundaryjFqPRXY6RQpdTRvE--
以上数据通常是由Web服务创建和发送的。
我正在尝试从Node-RED复制完全相同的HTTP请求。
JSON数据已经准备好,因此只能创建多部分请求。
我尝试使用node-red-contrib-http-multipart
,但我不确定如何配置。
[{"id":"e0fde1bd.e0aa","type":"httpInMultipart","z":"fc689d44.1c52","name":"","url":"/test/upload","method":"post","fields":"[ { \"name\": \"file\", \"maxCount\": 1}, { \"name\": \"data\", \"maxCount\": 1} ]","swaggerDoc":"","x":1390,"y":820,"wires":[["d109ed84.14d1d","8a39aaa0.6934c8","d0bc5b20.45f3a8"]]},{"id":"a2318dfd.bae7d","type":"http in","z":"fc689d44.1c52","name":"","url":"/test/send","method":"get","upload":false,"swaggerDoc":"","x":1380,"y":680,"wires":[["d7cfc418.89eb98"]]},{"id":"14c992f3.8652ad","type":"http response","z":"fc689d44.1c52","name":"","x":1750,"y":680,"wires":[]},{"id":"d109ed84.14d1d","type":"debug","z":"fc689d44.1c52","name":"","active":true,"console":"false","complete":"true","x":1570,"y":780,"wires":[]},{"id":"8a39aaa0.6934c8","type":"http response","z":"fc689d44.1c52","name":"","statusCode":"","headers":{},"x":1570,"y":860,"wires":[]},{"id":"1a646c83.8da7d3","type":"debug","z":"fc689d44.1c52","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1790,"y":780,"wires":[]},{"id":"d7cfc418.89eb98","type":"template","z":"fc689d44.1c52","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<form action=\"/test/upload\" method=\"POST\" enctype=\"multipart/form-data\">\n <div>\n <input type=\"file\" name=\"file\">\n <input type=\"submit\" value=\"Submit\">\n </div>\n</form>","output":"str","x":1580,"y":680,"wires":[["2971b104.12737e","14c992f3.8652ad"]]},{"id":"d0bc5b20.45f3a8","type":"change","z":"fc689d44.1c52","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"file\": req.files.file[0].buffer,\t \"data\": \"test\"\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1620,"y":820,"wires":[["1a646c83.8da7d3"]]},{"id":"2971b104.12737e","type":"debug","z":"fc689d44.1c52","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1730,"y":640,"wires":[]}]
任何有关如何解决该问题的指针将不胜感激。
答案 0 :(得分:1)
您不再需要多部分贡献节点。一段时间以来,开箱即用的http输入节点已经能够处理分段文件上传。
将方法设置为POST
,然后选中file uploads
选项。可以在message.req.files
中找到文件。
如果您要从Node-RED向某个服务发送多部分POST请求,请使用HTTP Request节点。节点信息面板中的状态如何。复制如下,但最好检查节点信息面板本身,因为下面的文本可能会过时-
文件上传要执行文件上传,msg.headers [“ content-type”] 应该设置为multipart / form-data,并将msg.payload传递给 节点必须是具有以下结构的对象:
{
"KEY": {
"value": FILE_CONTENTS,
"options": {
"filename": "FILENAME"
}
}
}
>
KEY,FILE_CONTENTS和FILENAME的值应设置为>适当的值。
答案 1 :(得分:-1)
似乎尚不支持直接在HTTP请求节点上直接创建multipart / form-data请求。但是,可以在功能节点上手动创建多部分有效负载,并将其提供给现成的HTTP请求节点。
基本上,将这样的有效负载馈送到HTTP请求节点(来自here的片段):
msg.headers = {
"Content-Type": "multipart/form-data; boundary=------------------------d74496d66958873e"
}
msg.payload = '--------------------------d74496d66958873e\r\n'+
'Content-Disposition: form-data; name="select"\r\n'+
'\r\n'+
'true\r\n'+
'--------------------------d74496d66958873e\r\n'+
'Content-Disposition: form-data; name="print"\r\n'+
'\r\n'+
'true\r\n'+
'--------------------------d74496d66958873e\r\n'+
'Content-Disposition: form-data; name="file"; filename="'+msg.filename+'"\r\n'+
'Content-Type: application/octet-stream\r\n'+
'\r\n'+
msg.payload+'\r\n'+
'--------------------------d74496d66958873e--\r\n';
return msg;