Write FTP file
Description
Writes a file to an FTP/SFTP server, creating it or overwriting whatever is already at the path. The content input is an output stream — the upstream node writes straight to the server, so uploads aren't buffered into memory. Use string-to-stream for text, model-to-stream to serialise a model, or copy-stream to forward a downloaded file (from Open FTP file or an HTTP response) without materialising it as a string; leaving content unconnected writes an empty file, which is how you drop a zero-byte sentinel. Returns the written file as an FTP file object that can be wired straight into Move/Remove FTP file. Set createDirectories to create any missing parent directories instead of failing. Branches on success/error.
When to use
Use Write FTP file whenever a pipeline has to put something onto an FTP/SFTP server: an export another system polls for, a report generated from a pipeline’s own data, or a copy of a file fetched from somewhere else. Like Find FTP files and Get FTP file, it takes Credentials and a Path rather than an FTP file object — the destination does not exist yet, so there is no server entry to wire in.
The Content pin is an output stream, the same pin type an HTTP request’s
body uses, so nothing is buffered in memory on the way to the server: use
String to stream for text you built in the pipeline, Model to stream to
serialise a model as JSON, or Copy stream to forward a file you just
downloaded. Leaving Content unconnected writes a zero-byte file, which is
the usual way to drop a .done sentinel once a batch of real files has
landed.
An existing file at the path is overwritten, not appended to. Parent
directories are not created unless Create directories is set: leave it off
and a path into a directory that does not exist takes the Error pin, which
is what catches a mistyped destination. Turn it on for a path the pipeline
builds itself, such as a dated /exports/2026/09/ folder — every missing
level is created. Use Create FTP directory instead when the directory has
to exist whether or not a file is written into it.
Pins
Input pins
| Pin | Type | Default | Notes |
|---|---|---|---|
| Credentials | FTP credentials | — | FTP credentials produced by an FTP credentials node. |
| Path | string | — | Destination path to write to. Format follows the server's conventions. Parent directories must already exist unless Create directories is set. |
| Content | Output stream | — | The bytes to write, as an output stream. Leave it unconnected to write an empty file. |
| Create directories | boolean | false | When true, every missing parent directory in the path is created before the file is written. Off by default, so a path into a directory that does not exist is reported rather than silently created. |
Output pins
| Pin | Type | Notes |
|---|---|---|
| File | FTP file | The file that was written, looked up on the server afterwards. Wire it straight into Move FTP file or Remove FTP file, or break it to read the size the server reports. |
Execution pins
| Pin | Direction |
|---|---|
| In | Input |
| Success | Output |
| Error | Output |
Example
Copy a nightly export from one server to another. Wire FTP
username/password credentials for the source server into Get FTP file
with Path /exports/orders.csv, pass its File output into Open FTP file,
and feed that stream into Copy stream. Then wire a second FTP credentials
node (the destination server) plus the Copy stream output into Write FTP
file with Path /inbox/orders.csv. Nothing is ever held in memory: the
bytes flow from one server straight to the other.
Follow it with a second Write FTP file, Path /inbox/orders.done and
Content left unconnected, so the receiving system knows the transfer
finished. Wire both Error pins to a Log message to tell a failed transfer
apart from a successful one.