Node.js 在节点红色中,如何上载到具有给定配置的节点,然后检索配置?

Node.js 在节点红色中,如何上载到具有给定配置的节点,然后检索配置?,node.js,ibm-cloud,node-red,watson,Node.js,Ibm Cloud,Node Red,Watson,我正在Bluemix上使用Node RED,我想让用户上传一个文档,下面是流的函数/模板中的相关代码片段 <form action="/upload" method="POST"> <h1>Upload PDF</h1> <input type="file" name="myFile" /> <input type="submit" /> </form> 并在节点的输出端口上使用以下功能访问文件 var fiel

我正在Bluemix上使用Node RED,我想让用户上传一个文档,下面是流的函数/模板中的相关代码片段

<form action="/upload" method="POST">
     <h1>Upload PDF</h1>
<input type="file" name="myFile" />
<input type="submit" />
</form>
并在节点的输出端口上使用以下功能访问文件

var fields = msg.req.fields;
msg.fields = Object.keys(fields);
var myFile = fields["myFile"][0];
msg.localFilename = myFile.path
...

1) 如何上载具有配置的节点


2) 获得文件名后,如何检索该文件以发送到下一个服务-下一个服务是“转换”-它接受文件名。

要使其工作,您需要:
1-连接到html节点的经典http节点,您可以在其中放置表单:

<form enctype="multipart/form-data" action="/fileUploaded" method="POST">
        <input type="file" name="myFile" />
        <input type="submit" />
</form>
您需要在/app/public/
您还需要“fs”:
在functionGlobalContext中的bluemix-settings.js中添加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安装节点红色contrib http多部分

  • 正确完成安装后,您将看到httpInMultipart节点
  • 基本html文件上载代码:
  • 
    
    我在这方面花了一点时间,但也无法让它正常工作。然而,我不明白你不能张贴错误。确保您的http多部分节点处于打开/上载状态(根据您的html),并且具有相应的http响应节点。node-Red是一个开放源代码,因此您可能希望尝试他们的社区,看看您是否可以在那里获得专家的帮助啊,我现在明白了。回答得很好。我强烈建议您使用“节点红色节点文件”节点,而不是直接在功能节点中使用fs模块。您好@Siena,当我尝试安装节点http multipart时,我遇到以下错误。有什么建议吗?npm WARN nodejs ENOINT:没有这样的文件或目录,请打开“c:\Program Files\nodejs\package.json”npm WARN nodejs无说明npm WARN nodejs无存储库字段。npm WARN nodejs无自述文件数据npm WARN nodejs无许可证字段。节点是否已正确安装?请使用node-v检查尝试安装节点时,您可能位于错误的目录中。确保您位于项目的文件夹中。
    [{ "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;
    
    <html>
        <body>
            <h1>Job Done</h1>
            <a href=".{{localFilename}}">File uploaded here</a>
        </body>
    </html>