在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> 
  1. 为node-red安装multer,然后重新启动node-red。

npm install node-red-contrib-http-multipart

  1. 正确完成安装后,您将看到httpInMultipart节点。
  2. 基本的htmlfile upload代码:
  <form action="/upload" enctype="multipart/form-data" method="POST"> <input type="file" name="myFile" /> <input type="submit" /> </form>