在 Node-RED 中,我如何上传到具有给定配置的节点并稍后检索配置?
In Node-RED, how do I upload to a node with the given configuration and retrieve the configuration later?
我在 Bluemix 上使用 Node-RED,我想让用户上传一个文档,这里是流程 function/template 中的相关代码片段
<form action="/upload" method="POST">
<h1>Upload PDF</h1>
<input type="file" name="myFile" />
<input type="submit" />
</form>
当我 运行 它时,我选择了一个文件并按 'submit',但随后出现了消息
Cannot POST /upload
然后我去了http://flows.nodered.org/node/node-red-contrib-http-multipart
,在示例中它说
您可以上传到具有以下配置的节点:
[{ "name": "myFile" }]
并在节点的输出端口上使用以下函数访问文件
var fields = msg.req.fields;
msg.fields = Object.keys(fields);
var myFile = fields["myFile"][0];
msg.localFilename = myFile.path
...
1) 如何上传节点配置?
2)获得文件名后,如何检索它以发送到下一个服务? -下一个服务是 'Conversion' - 它接收文件名。
要使其正常工作,您需要:
1- 连接到放置表单的 html 节点的经典 http 节点:
<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' :
在 bluemix-settings.js 的 functionGlobalContext 中添加 fs:require('fs')
在 package.json 中添加 "fs":"x.x"
该文件将复制到那里:/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 安装 node-red-contrib-http-multipart
- 正确完成安装后,您将看到 httpInMultipart 节点。
- 基本html文件上传代码:
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="file" name="myFile" />
<input type="submit" />
</form>
- httpInMultipart->功能->Http 响应节点
配置 httpInMultipart 节点:
方法:POST
url: /上传
字段:[ { "name": "myFile"} ]
在函数节点中写入如下代码:
var file = msg.req.files;
var filesize
msg.test=file;
var localFilenamePath = file.myFile[0].path;
var fileSize = file.myFile[0].size;
var response={};
if(msg.test)
{
response.statusCode=0;
response.localFilenamePath=localFilenamePath;
response.fileSize = fileSize;
response.sendMessage="Successful";
}
else
{
response.statusCode=1;
response.sendMessage="Failed";
}
msg.payload=response;
return msg;
瞧!我们完成了!
我在 Bluemix 上使用 Node-RED,我想让用户上传一个文档,这里是流程 function/template 中的相关代码片段
<form action="/upload" method="POST">
<h1>Upload PDF</h1>
<input type="file" name="myFile" />
<input type="submit" />
</form>
当我 运行 它时,我选择了一个文件并按 'submit',但随后出现了消息
Cannot POST /upload
然后我去了http://flows.nodered.org/node/node-red-contrib-http-multipart
,在示例中它说
您可以上传到具有以下配置的节点:
[{ "name": "myFile" }]
并在节点的输出端口上使用以下函数访问文件
var fields = msg.req.fields;
msg.fields = Object.keys(fields);
var myFile = fields["myFile"][0];
msg.localFilename = myFile.path
...
1) 如何上传节点配置?
2)获得文件名后,如何检索它以发送到下一个服务? -下一个服务是 'Conversion' - 它接收文件名。
要使其正常工作,您需要:
1- 连接到放置表单的 html 节点的经典 http 节点:
<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' :
在 bluemix-settings.js 的 functionGlobalContext 中添加 fs:require('fs')
在 package.json 中添加 "fs":"x.x"
该文件将复制到那里:/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 安装 node-red-contrib-http-multipart
- 正确完成安装后,您将看到 httpInMultipart 节点。
- 基本html文件上传代码:
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="file" name="myFile" />
<input type="submit" />
</form>
- httpInMultipart->功能->Http 响应节点
配置 httpInMultipart 节点: 方法:POST url: /上传 字段:[ { "name": "myFile"} ]
在函数节点中写入如下代码:
var file = msg.req.files;
var filesize
msg.test=file;
var localFilenamePath = file.myFile[0].path;
var fileSize = file.myFile[0].size;
var response={};
if(msg.test)
{
response.statusCode=0;
response.localFilenamePath=localFilenamePath;
response.fileSize = fileSize;
response.sendMessage="Successful";
}
else
{
response.statusCode=1;
response.sendMessage="Failed";
}
msg.payload=response;
return msg;
瞧!我们完成了!