> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flowx.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# File Storage

> Connect to external file storage (FTP, SFTP, S3, or Azure Blob) as a data source and move files in and out of FlowX from your workflows.

## Overview

File Storage is a data source type that lets you connect FlowX workflows to **external file storage your organization manages independently** — an FTP/SFTP server, an S3 (or S3-compatible) bucket, or an Azure Blob Storage container. You configure a connection, define named file operations against it, and call those operations from workflows.

<CardGroup cols={2}>
  <Card title="Connect to your storage" icon="folder-open">
    FTP, SFTP, S3 / S3-compatible, and Azure Blob Storage, each with its own connection and authorization settings
  </Card>

  <Card title="Define file operations" icon="list-check">
    Save named List, Download, Upload, Delete, and Move operations scoped to a root path
  </Card>

  <Card title="Browse and test" icon="flask">
    Browse files in the configured storage and run any operation live before you use it
  </Card>

  <Card title="Reusable in workflows" icon="diagram-project">
    Reference file operations from a Data Source node alongside other data sources
  </Card>
</CardGroup>

***

## Prerequisites

* An external file storage system reachable from your FlowX deployment: an FTP/SFTP server, an S3 or S3-compatible bucket (AWS S3, MinIO, Wasabi, Backblaze B2, DigitalOcean Spaces, Cloudflare R2, and similar), or an Azure Blob Storage container.
* Credentials for the storage system with the permissions your operations require (read for List/Download, write for Upload/Move, delete for Delete).
* The **`file-gateway`** service deployed and able to reach both the storage system and the **`document-plugin`** service. See [File Gateway setup](/5.9/setup-guides/file-gateway-setup).

***

## Creating a File Storage data source

<Steps>
  <Step title="Open Data Sources">
    Navigate to **Integration Designer** → **Data Sources** in your project.
  </Step>

  <Step title="Add a new data source">
    Click the **+** button to open the **Add Data Source** dialog. In the **Files** category, select **External File Storage**.
  </Step>

  <Step title="Configure the connection on the Settings tab">
    New File Storage data sources open on the **Settings** tab, which has three sections:

    * **Protocol** — select the storage type: **FTP**, **SFTP**, **S3 / S3-compatible**, or **Azure Blob Storage**.
    * **Authorization** — choose an authorization type and supply credentials (see [Authorization](#authorization)).
    * **General Settings** — set the **Root Path** of the storage (all operations are scoped under this prefix) and the protocol-specific connection fields (see [Connection settings](#connection-settings)).
  </Step>

  <Step title="Test the connection">
    Click **Test connection** in the Authorization section to verify the credentials and connectivity. A successful test reports **Established connection**.
  </Step>

  <Step title="Save">
    Click **Save** to create the data source. Until a valid connection is saved, the **Files** tab shows *File storage is not configured* and the **Settings** tab shows a *Settings are not configured* warning.
  </Step>
</Steps>

***

## Connection settings

The connection fields depend on the protocol you select.

### FTP

| Field          | Description                                           | Default   |
| -------------- | ----------------------------------------------------- | --------- |
| **Host**       | FTP server hostname or IP (required)                  | —         |
| **Port**       | FTP port (required)                                   | `21`      |
| **Mode**       | Connection mode: **Active** or **Passive**            | `Passive` |
| **Encryption** | **None**, **FTPS (Explicit)**, or **FTPS (Implicit)** | `None`    |

### SFTP

| Field                        | Description                                                             | Default      |
| ---------------------------- | ----------------------------------------------------------------------- | ------------ |
| **Host**                     | SFTP server hostname or IP (required)                                   | —            |
| **Port**                     | SFTP port (required)                                                    | `22`         |
| **Strict host-key checking** | **Accept new** or **Require fingerprint**                               | `Accept new` |
| **Known-hosts fingerprint**  | Optional. The expected host-key fingerprint when requiring verification | —            |

### S3 / S3-compatible

| Field                 | Description                                                                                                                                                                                                     |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Endpoint URL**      | Optional. Leave blank for AWS S3. Set this only for S3-compatible stores (MinIO, Wasabi, Backblaze B2, DigitalOcean Spaces, Cloudflare R2, Localstack, and similar).                                            |
| **Region**            | Required, including for non-AWS stores such as MinIO.                                                                                                                                                           |
| **Bucket**            | Required. Fixed for the lifetime of this data source.                                                                                                                                                           |
| **Path-style access** | Off by default (virtual-host style, the AWS default). Turn **ON** for path-style addressing, required by MinIO, Localstack, and most self-hosted stores. Rule of thumb: AWS S3 → off; MinIO / self-hosted → on. |

### Azure Blob Storage

| Field                    | Description                                                             |
| ------------------------ | ----------------------------------------------------------------------- |
| **Storage account name** | Required. The Azure storage account.                                    |
| **Container name**       | Required. The blob container.                                           |
| **Endpoint**             | Optional. A custom endpoint, when not using the default Azure endpoint. |

***

## Authorization

The available authorization types depend on the protocol:

| Protocol               | Authorization types                                                                                                 |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **FTP**                | No authorization, or **Basic** (username / password)                                                                |
| **SFTP**               | **Basic** (username / password), or **Private key** (username + private key)                                        |
| **S3**                 | **Access key** (access key ID + secret access key)                                                                  |
| **Azure Blob Storage** | **Access key** (storage account name + account key), or **Service account** (tenant ID + client ID + client secret) |

For Azure with **Access key**, the credential fields are labeled **Storage Account Name** and **Account Key**.

***

## File operations

Each File Storage data source holds a list of named operations, managed on the **Operations** tab. Click to add an operation, choose its **Operation type**, and give it a **Name** and optional **Description**. Each operation opens a details page where you configure its parameters, and a test modal runs it live against the storage.

| Operation    | What it does                                                                                                              |
| ------------ | ------------------------------------------------------------------------------------------------------------------------- |
| **List**     | Lists file metadata inside the root path. Use **File Path** to target a subfolder and **File pattern** to filter results. |
| **Download** | Copies a file from external storage into Document Plugin internal storage for further processing.                         |
| **Upload**   | Copies a file from Document Plugin internal storage to external storage.                                                  |
| **Delete**   | Removes files from the external storage.                                                                                  |
| **Move**     | Moves a file within the external storage. Move can also rename the file.                                                  |

### Operation parameters

| Operation    | Parameters                                                                                                                                 |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **List**     | **File Path** (optional subfolder), **File pattern** (optional wildcard, e.g. `*.csv`, `report-*.xml`, `2026/*.pdf`), **Recursive** toggle |
| **Download** | **Source File Path** (required), **Document folder** (required), **Document type** (optional), **File name override** (optional)           |
| **Upload**   | **Destination file path** (required), **Document plugin path** (required)                                                                  |
| **Delete**   | **File Path** (required)                                                                                                                   |
| **Move**     | **Source File Path** (required), **Destination path** (required)                                                                           |

<Note>
  Download and Upload exchange files with the **Document Plugin** internal storage rather than the workflow directly — Download brings an external file into FlowX, Upload sends a stored document out.
</Note>

### Browsing files

The **Files** tab is a file browser for the configured storage. Once a valid connection is saved, you can navigate the storage, copy file paths, and preview files. The browser is available only after the connection is configured on the Settings tab.

***

## Using in workflows

File operations are called from a **Data Source node** in workflows.

<Steps>
  <Step title="Add a Data Source node">
    On the workflow canvas, add a **Data Source** node and select your File Storage data source.
  </Step>

  <Step title="Select the operation">
    Pick one of the operations defined on that data source. The picker lists only the operations saved on the selected data source.
  </Step>

  <Step title="Map parameters">
    Map workflow inputs to the operation's parameters, and map the operation result (file list, document reference, or status) to a workflow variable.
  </Step>
</Steps>

***

## Deployment

File Storage operations run in the **`file-gateway`** service.

* **`file-gateway`** is MongoDB-backed and connects to the **`document-plugin`** service to exchange files; Download and Upload operations move files between external storage and document-plugin internal storage.
* It does **not** require Redis.
* It authenticates using the **`flowx-file-gateway-sa`** service account.
* The default maximum file size for operations is **1 GiB**.

For deployment configuration, see [File Gateway setup](/5.9/setup-guides/file-gateway-setup).

***

## Related resources

<CardGroup cols={2}>
  <Card title="File Gateway setup" icon="gear" href="/5.9/setup-guides/file-gateway-setup">
    Deployment configuration for the file-gateway service
  </Card>

  <Card title="Integration Designer" icon="diagram-project" href="./integration-designer">
    Overview of all data source types and workflow building
  </Card>

  <Card title="Oracle Database" icon="database" href="./oracle-database">
    Connect to externally managed Oracle databases
  </Card>

  <Card title="Unmanaged MongoDB" icon="leaf" href="./unmanaged-mongodb">
    Connect to externally managed MongoDB instances
  </Card>
</CardGroup>
