diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.html b/packages/node_modules/@node-red/nodes/core/storage/10-file.html
index b76a01615..fa3fdccc9 100755
--- a/packages/node_modules/@node-red/nodes/core/storage/10-file.html
+++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.html
@@ -3,6 +3,7 @@
@@ -38,6 +39,7 @@
+
@@ -197,6 +199,7 @@
defaults: {
name: {value:""},
filename: {value:""},
+ filenameType: {value:""},
appendNewline: {value:true},
createDir: {value:false},
overwriteFile: {value:"false"},
@@ -207,10 +210,12 @@
outputs:1,
icon: "file-out.svg",
label: function() {
+ var fn = this.filename;
+ if(this.filenameType != "str") { fn = ""; }
if (this.overwriteFile === "delete") {
- return this.name||this._("file.label.deletelabel",{file:this.filename});
+ return this.name||this._("file.label.deletelabel",{file:fn});
} else {
- return this.name||this.filename||this._("file.label.write");
+ return this.name||fn||this._("file.label.write");
}
},
paletteLabel: RED._("node-red:file.label.write"),
@@ -229,6 +234,17 @@
value: "setbymsg",
label: node._("file.encoding.setbymsg")
}).text(label).appendTo(encSel);
+ $("#node-input-filename").typedInput({
+ default: "str",
+ types:[{ value: "str", label:"", icon:"red/images/typedInput/az.svg"}, "msg", "jsonata", "env"],
+ typeField: $("#node-input-filenameType")
+ });
+ if(!node.filename && !node.filenameType) {
+ node.filename = "filename"
+ node.filenameType = "msg"
+ $("#node-input-filename").typedInput("type", node.filenameType);
+ $("#node-input-filename").typedInput("value", node.filename);
+ }
encodings.forEach(function(item) {
if(Array.isArray(item)) {
var group = $("", {
@@ -267,6 +283,7 @@
defaults: {
name: {value:""},
filename: {value:""},
+ filenameType: {value:""},
format: {value:"utf8"},
chunk: {value:false},
sendError: {value: false},
@@ -291,7 +308,9 @@
},
icon: "file-in.svg",
label: function() {
- return this.name||this.filename||this._("file.label.read");
+ var fn = this.filename;
+ if(this.filenameType != "str") { fn = ""; }
+ return this.name||fn||this._("file.label.read");
},
paletteLabel: RED._("node-red:file.label.read"),
labelStyle: function() {
@@ -305,6 +324,17 @@
value: "none",
label: label
}).text(label).appendTo(encSel);
+ $("#node-input-filename").typedInput({
+ default: "str",
+ types:[{ value: "str", label:"", icon:"red/images/typedInput/az.svg"}, "msg", "jsonata", "env"],
+ typeField: $("#node-input-filenameType")
+ });
+ if(!node.filename && !node.filenameType) {
+ node.filename = "filename"
+ node.filenameType = "msg"
+ $("#node-input-filename").typedInput("type", node.filenameType);
+ $("#node-input-filename").typedInput("value", node.filename);
+ }
encodings.forEach(function(item) {
if(Array.isArray(item)) {
var group = $("", {
diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.js b/packages/node_modules/@node-red/nodes/core/storage/10-file.js
index ba81125fe..309de1abf 100644
--- a/packages/node_modules/@node-red/nodes/core/storage/10-file.js
+++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.js
@@ -39,6 +39,7 @@ module.exports = function(RED) {
// Write/delete a file
RED.nodes.createNode(this,n);
this.filename = n.filename;
+ this.filenameType = n.filenameTpye;
this.appendNewline = n.appendNewline;
this.overwriteFile = n.overwriteFile.toString();
this.createDir = n.createDir || false;
@@ -50,7 +51,22 @@ module.exports = function(RED) {
node.closeCallback = null;
function processMsg(msg,nodeSend, done) {
- var filename = node.filename || msg.filename || "";
+ var filename = node.filename || "";
+ //Pre V3 compatibility - if filename and filenameType are empty, check msg.filename
+ if(!node.filenameType && !node.filename) {
+ msg.filename = "filename";
+ node.filenameType = "msg";
+ }
+
+ RED.util.evaluateNodeProperty(node.filename,node.filenameType,node,msg,(err,value) => {
+ if (err) {
+ node.error(err,msg);
+ return done();
+ } else {
+ filename = value;
+ }
+ });
+
var fullFilename = filename;
if (filename && RED.settings.fileWorkingDirectory && !path.isAbsolute(filename)) {
fullFilename = path.resolve(path.join(RED.settings.fileWorkingDirectory,filename));
@@ -158,7 +174,7 @@ module.exports = function(RED) {
done();
});
}
- if (node.filename) {
+ if (node.filenameType === "str") {
// Static filename - write and reuse the stream next time
node.wstream.write(buf, function() {
nodeSend(msg);
@@ -256,6 +272,7 @@ module.exports = function(RED) {
// Read a file
RED.nodes.createNode(this,n);
this.filename = n.filename;
+ this.filenameType = n.filenameType;
this.format = n.format;
this.chunk = false;
this.encoding = n.encoding || "none";
@@ -270,8 +287,24 @@ module.exports = function(RED) {
var node = this;
this.on("input",function(msg, nodeSend, nodeDone) {
- var filename = (node.filename || msg.filename || "").replace(/\t|\r|\n/g,'');
+ var filename = node.filename || "";
+ //Pre V3 compatibility - if filename and filenameType are empty, check msg.filename
+ if(!node.filenameType && !node.filename) {
+ msg.filename = "filename";
+ node.filenameType = "msg";
+ }
+
+ RED.util.evaluateNodeProperty(node.filename,node.filenameType,node,msg,(err,value) => {
+ if (err) {
+ node.error(err,msg);
+ return done();
+ } else {
+ filename = (value || "").replace(/\t|\r|\n/g,'');
+ }
+ });
+
var fullFilename = filename;
+ var filePath = "";
if (filename && RED.settings.fileWorkingDirectory && !path.isAbsolute(filename)) {
fullFilename = path.resolve(path.join(RED.settings.fileWorkingDirectory,filename));
}