在Node-RED中,如何上传到具有给定configuration的节点并稍后检索configuration?
我在Bluemix上使用Node-RED,我想让用户上传一个文档,这里是一个stream程的函数/模板中的相关代码片段
<form action="/upload" method="POST"> <h1>Upload PDF</h1> <input type="file" name="myFile" /> <input type="submit" /> </form>
当我运行它,我select了一个文件,然后按“提交”,但接着传来的消息Cannot POST /upload
然后我去http://flows.nodered.org/node/node-red-contrib-http-multipart ,在这个例子中,它说
您可以使用以下configuration上传到节点:
[{ "name": "myFile" }]
并使用节点的输出端口上的以下function访问文件
var fields = msg.req.fields; msg.fields = Object.keys(fields); var myFile = fields["myFile"][0]; msg.localFilename = myFile.path ...
1)如何用configuration上传节点?
2)一旦我得到文件名,我如何检索它被发送到下一个服务? – 下一个服务是“转换” – 它需要文件名。
要使其工作,您需要:
1-一个经典的http节点连接到一个html节点,你把你的表单:
<form enctype="multipart/form-data" action="/fileUploaded" method="POST"> <input type="file" name="myFile" /> <input type="submit" /> </form>
2-然后你把你的HTTP多部分节点与字段:
[{ "name": "myFile"}] You link that node to a function node with the following code : var fields = msg.req.files; msg.fields = Object.keys(fields); var myFile = fields["myFile"][0]; var fs = global.get('fs'); var inStr = fs.createReadStream(myFile.path); var outStr = fs.createWriteStream('/app/public/upload/testUpload'); inStr.pipe(outStr); msg.localFilename ='/upload/testUpload' return msg;
你需要在/ app / public /目录下有一个名为“upload”的文件夹,
你还需要'fs':
在functionGlobalContext中的bluemix-settings.js中添加fs:require('fs')
在package.json中,添加“fs”:“xx”
该文件将被复制到那里:/ app / public / upload / testUpload
然后我们可以通过msg.localFilename在下一个节点访问它,例如在这样的HTML页面中:
<html> <body> <h1>Job Done</h1> <a href=".{{localFilename}}">File uploaded here</a> </body> </html>
- 为node-red安装multer,然后重新启动node-red。
npm install node-red-contrib-http-multipart
- 正确完成安装后,您将看到httpInMultipart节点。
- 基本的htmlfile upload代码:
<form action="/upload" enctype="multipart/form-data" method="POST"> <input type="file" name="myFile" /> <input type="submit" /> </form>