有没有办法将文件发送到 Node-Red 中的自定义节点表单?
is there a way to send a file to a custom node form in Node-Red?
在自定义节点中,我想提供使用文件自动填充表单数据的可能性。所以我需要允许以编辑形式上传文件。
在我的自定义节点中,我想允许将文件发送到自定义端点(通过 RED.admin.post 生成),该端点解析文件并向调用方输出 json。
有办法吗?
我是这样解决的:
在模板 .html 文件中
<script type="text/x-red" data-template-name="...">
<input id="myFile" type="file" name="fileToParse">
<input id="file-submit" type="submit" value="Import data from file" name="submit">
...
oneditprepare: function () {
$('#file-submit').click(function (e) {
var fd = new FormData();
fd.append('file', $('#myFile')[0].files[0]);
var file = fd.get('file');
var blb = file.slice();
var reader = new FileReader();
// This fires after the blob has been read/loaded.
reader.addEventListener('loadend', (e) => {
var fileData = e.srcElement.result;
console.log(fileData);
$.ajax({
url: '/mynode/file-parse',
data: {fileData: fileData},
method: 'POST',
success: function (data) {
populateForm(data);
}
});
});
// Start reading the blob as text.
reader.readAsBinaryString(blb);
});
在 .js 中:
RED.httpAdmin.post("/mynode/file-parse", function (req, res) {
var output = [];
var fileData = req.body.fileData;
// ... parse fileData end produce output
res.json(output)
});
在自定义节点中,我想提供使用文件自动填充表单数据的可能性。所以我需要允许以编辑形式上传文件。
在我的自定义节点中,我想允许将文件发送到自定义端点(通过 RED.admin.post 生成),该端点解析文件并向调用方输出 json。
有办法吗?
我是这样解决的:
在模板 .html 文件中
<script type="text/x-red" data-template-name="...">
<input id="myFile" type="file" name="fileToParse">
<input id="file-submit" type="submit" value="Import data from file" name="submit">
...
oneditprepare: function () {
$('#file-submit').click(function (e) {
var fd = new FormData();
fd.append('file', $('#myFile')[0].files[0]);
var file = fd.get('file');
var blb = file.slice();
var reader = new FileReader();
// This fires after the blob has been read/loaded.
reader.addEventListener('loadend', (e) => {
var fileData = e.srcElement.result;
console.log(fileData);
$.ajax({
url: '/mynode/file-parse',
data: {fileData: fileData},
method: 'POST',
success: function (data) {
populateForm(data);
}
});
});
// Start reading the blob as text.
reader.readAsBinaryString(blb);
});
在 .js 中:
RED.httpAdmin.post("/mynode/file-parse", function (req, res) {
var output = [];
var fileData = req.body.fileData;
// ... parse fileData end produce output
res.json(output)
});