【发布时间】:2018-04-02 18:59:04
【问题描述】:
我和this post有类似的问题
我通过文件缓冲区节点获取图像。如果此节点进入 ibm watson 的视觉识别节点,则可以正常工作。
我还想使用这张图片将其发布到另一个 API。因此,我使用 URL = https://api-us.faceplusplus.com/facepp/v3/detect
的 http 请求节点在它前面,我使用一个函数节点来为这个 http 请求创建 header 和 body。它工作得很好。但我无法将图像“附加”到它。
我不知道正确的语法。就是“image_file”那一行。
var image = msg.payload;
msg.headers = {};
msg.headers["content-type"] ='application/x-www-form-urlencoded';
msg.payload = {};
msg.payload['api_key'] = 'zrxC';
msg.payload['api_secret'] = 's3UN';
msg.payload['image_file'] = image;
msg.payload['return_landmark'] = '1';
msg.payload['return_attributes'] = 'gender,age,emotion,beauty,skinstatus';
return msg;
如果我使用不同的图像输入 (url),它可以工作。
msg.payload['image_url'] = 'http://picture.com/pic.jpg";
Soooo...语法;)
也许这也是一个问题,因为图像需要另一种内容类型。是否可以为不同的身体部位赋予不同的内容类型?
编辑:我尝试了多部分 http 请求...这是我的整个流程。
[{"id":"6c6e1506.29cf2c","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"b84cd67b.aaaee8","type":"http response","z":"6c6e1506.29cf2c","name":"","x":971,"y":602,"wires":[]},{"id":"a220ce16.64fcb","type":"http in","z":"6c6e1506.29cf2c","name":"Get Home Page","url":"/homepage","method":"get","upload":false,"swaggerDoc":"","x":441,"y":590,"wires":[["c46a3f0a.a30cb"]]},{"id":"c46a3f0a.a30cb","type":"template","z":"6c6e1506.29cf2c","name":"Form and Response Template","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":" <html>\n <body>\n <form action=\"/classify\" method=\"post\" enctype=\"multipart/form-data\">\n <input type=\"file\" name=\"pic\" accept=\"image/*\"><br>\n <input type=\"submit\" value=\"Submit\">\n </form> \n <div>Classifications:</div>\n <div>\n {{#result}}\n <table>\n <tr>\n <th>Class</th>\n <th>Score</th>\n <th>Type</th>\n </tr>\n {{#images}}\n {{#.}}\n {{#classifiers}}\n {{#.}}\n {{#classes}}\n {{#.}}\n <tr>\n <td>{{class}}</td>\n <td>{{score}}</td> \n <td>{{&type_hierarchy}}</td>\n </tr> \n {{/.}} \n {{/classes}} \n {{/.}} \n {{/classifiers}}\n {{/.}}\n {{/images}}\n </table>\n {{/result}}\n </div>\n </body>\n</html>","x":720.5,"y":600,"wires":[["b84cd67b.aaaee8"]]},{"id":"ee17076b.7b9038","type":"function","z":"6c6e1506.29cf2c","name":" Determine File Path","func":"if (msg.req.files) {\n var files = Object.keys(msg.req.files);\n msg.payload = msg.req.files[files[0]][0].path; \n}\nreturn msg;","outputs":1,"noerr":0,"x":321.5,"y":737,"wires":[["d8385fe9.3b5d4"]]},{"id":"b4bcb13e.bd4a","type":"visual-recognition-v3","z":"6c6e1506.29cf2c","name":"","apikey":"3738dbb4a5ae703eb3d23285127f8a21233e6566","image-feature":"classifyImage","lang":"en","x":701,"y":716,"wires":[["95fdb967.895c98","c46a3f0a.a30cb"]]},{"id":"95fdb967.895c98","type":"debug","z":"6c6e1506.29cf2c","name":"","active":true,"tosidebar":true,"console":false,"complete":"result","x":912.5,"y":760,"wires":[]},{"id":"d8385fe9.3b5d4","type":"file-buffer","z":"6c6e1506.29cf2c","name":"","mode":"asBuffer","x":511,"y":793,"wires":[["b4bcb13e.bd4a","7b398291.92ee0c"]]},{"id":"5c0e525d.d8230c","type":"httpInMultipart","z":"6c6e1506.29cf2c","name":"Classify Image","url":"/classify","method":"post","fields":"[{ \"name\":\"pic\"}]","swaggerDoc":"","x":117,"y":774,"wires":[["ee17076b.7b9038"]]},{"id":"4d5c181f.bdcbe8","type":"http request","z":"6c6e1506.29cf2c","name":"face++","method":"POST","ret":"obj","url":"https://api-us.faceplusplus.com/facepp/v3/detect","tls":"","x":797,"y":928,"wires":[["11b9d42c.ae40ec"]]},{"id":"11b9d42c.ae40ec","type":"debug","z":"6c6e1506.29cf2c","name":"","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"payload","x":1005,"y":927,"wires":[]},{"id":"7b398291.92ee0c","type":"function","z":"6c6e1506.29cf2c","name":"set payload and headers","func":"var image = msg.payload;\n\n\nmsg.headers = {};\nmsg.headers[\"content-type\"] ='application/x-www-form-urlencoded';\n\nmsg.payload = {};\nmsg.payload['api_key'] = 'z8lK8AM2u7X9CfI5PodNcFYv0OPq3rxC';\nmsg.payload['api_secret'] = 's33uL-coCxnDZn_naWMceZh-Xko1QSUN';\nmsg.payload['image_file'] = [image]; \nmsg.payload['return_landmark'] = '1';\nmsg.payload['return_attributes'] = 'gender,age,emotion,beauty,skinstatus';\n\n\nreturn msg;\n","outputs":1,"noerr":0,"x":560,"y":933,"wires":[["4d5c181f.bdcbe8"]]}]
我的问题是将图像发送到红色突出显示的 API。
【问题讨论】:
-
Nick (@knolleary) 在您之前的问题中指出,您需要使用 node-red-contrib-http-request-multipart 来处理此类请求。
-
是的,但是对于那个节点,我也无法使用正确的语法来正确处理缓冲区节点的图像。
-
但是你没有展示你尝试过的东西
-
我尝试了here给出的解释...之后我编辑了我的原始帖子并添加了我当前的流程。
标签: http request nodes node-red