The File Operation node
OPC UA File Operation Node
Perform read and write operations on OPC UA File objects that implement the FileType interface (ns=0;i=11575).
This node enables interaction with files stored on OPC UA servers, supporting various read/write modes, encoding options, and output formats.
Configuration
NodeId
- Required: The NodeId must reference an Object node with TypeDefinition = FileType
- Input: Can be configured in the node or provided dynamically via
msg.nodeId - Format: Supports standard NodeId formats (ns=X;i=Y) and browse paths (/ns1:FolderDemo/ns1:file.txt)
Mode
Select the operation to perform:
- Read: Reads the complete file content from the OPC UA server
- ReadSize: Returns only the file size in bytes without reading content
- Write: Writes data to the file (equivalent to WriteEraseExisting)
- WriteEraseExisting: Overwrites the entire file with new content
- WriteAppend: Appends data to the end of the existing file
Encoding (Read/Write)
Controls character encoding for text files:
- none: Raw binary data (default)
- setbymsg: Use encoding specified in
msg.encoding - utf8, ascii, utf-16le: Unicode encodings
- Shift_JIS, EUC-JP: Japanese encodings
- GB2312, GBK, Big5: Chinese/Taiwan encodings
- Plus many other regional encodings (Windows, ISO, IBM, Mac, KOI8)
Format (Read only)
Output format for read operations:
- buffer: Returns raw Buffer object (default)
- utf8: Returns decoded string using specified encoding
- lines: Returns array of strings, split by newline characters
Input Message
Read Operations
NodeId source
Whether the message can override the configured NodeId is a setting on the field's prefix — this node, this node, templated or the message. The message properties below apply under the message, and under not set (flows saved before 3.40). See Where does the NodeId come from?.
msg = {
nodeId: "ns=1;s=MyFile" // used when the NodeId source is "the message"
encoding: "utf8" // Optional, when encoding="setbymsg"
}
Write Operations
msg = {
payload: "content to write", // String, Buffer, or JSON object
nodeId: "ns=1;s=MyFile", // used when the NodeId source is "the message"
encoding: "utf8" // Optional, when encoding="setbymsg"
}
Write Payload Types:
- String: Written directly (with optional encoding)
- Buffer: Written as binary data
- Object/Array: Automatically JSON.stringify'd
- Boolean/Number: Converted to string
Output Message
Read Mode
msg = {
payload: <Buffer|string|string[]> // Based on format setting
}
ReadSize Mode
msg = {
payload: 12345 // File size in bytes
}
Write Modes
msg = {
size: 12345 // Number of bytes written
}
How It Works
Read Process:
- Opens the OPC UA File object
- Reads content in optimized chunks (respects server MaxByteStringLength)
- Automatically handles large files using streaming
- Applies encoding/format conversion if specified
- Returns formatted output
Write Process:
- Extracts and encodes data from msg.payload
- Opens file in specified mode (Write/Append)
- Splits data into chunks based on transport limits
- Writes chunks sequentially to server
- Returns final file size
Performance Optimization:
- Chunk size automatically calculated based on:
- Server's MaxByteStringLength capability
- Transport maxMessageSize settings
- Hard limit of BinaryStream.maxByteStringLength
- Streaming architecture handles files larger than memory
Node Status
- Operating: Reading/writing in progress
- size = X: Operation completed successfully (X bytes)
- failed: Operation error (check debug panel)
Examples
Read Text File
// Configure: Mode=Read, Format=utf8, Encoding=utf8
// Input: trigger inject
// Output: msg.payload = "file contents as string"
Read CSV as Lines
// Configure: Mode=Read, Format=lines, Encoding=utf8
// Input: trigger inject
// Output: msg.payload = ["line1", "line2", "line3"]
Write JSON Data
// Configure: Mode=Write, Encoding=utf8
msg.payload = { temperature: 25.5, timestamp: Date.now() };
// Result: JSON string written to file
Append Log Entry
// Configure: Mode=WriteAppend, Encoding=utf8
msg.payload = "2025-11-24 12:00:00 - New log entry\n";
// Result: Appended to existing file
Check File Size
// Configure: Mode=ReadSize
// Input: trigger inject
// Output: msg.payload = 4096 (bytes)
Dynamic NodeId
// Configure: NodeId = (leave empty)
msg.nodeId = "/ns1:Logs/ns1:system.log";
// Read/write operation uses runtime-specified file
Error Handling
Common errors:
- "nothing to write": msg.payload is undefined/empty
- "expecting a nodeIdString": Invalid nodeId format
- Failed status: Node error contains specific OPC UA status code
Tips
- Large Files: Node automatically handles chunking - no size limits beyond server capabilities
- Text Files: Use encoding="utf8" and format="utf8" for best results
- Binary Files: Use encoding="none" and format="buffer" for images, executables, etc.
- CSV Processing: Use format="lines" to get array of rows for easy parsing
- Dynamic Files: Pass nodeId in msg for runtime file selection
- Append Mode: Ideal for logging scenarios where existing data must be preserved
Related Nodes
- OpcUa-Client2-Browse: Discover available File objects on the server
- OpcUa-Client2-Read: Read file metadata properties (Size, OpenCount, UserWritable)
- OpcUa-Client2-Call: Call file methods (GetPosition, SetPosition, etc.)