# Download File

### Overview

The **Download File Component** retrieves a file from a remote FTP or SFTP server and saves it locally, allowing seamless file transfer automation.

### Usage

This component connects to an FTP/SFTP server, downloads a specified file, and provides metadata upon successful retrieval.

#### Input Ports

| Port | Description                              |
| ---- | ---------------------------------------- |
| `in` | Receives the file path to be downloaded. |

#### Output Ports

| Port       | Description                                                                                      |
| ---------- | ------------------------------------------------------------------------------------------------ |
| `out`      | Emits the downloaded file's metadata including file ID, filename, checksum (MD5), and file size. |
| `notFound` | Emits an error if the file is not found or if access is denied.                                  |

#### Properties

| Property | Type     | Description                                 |
| -------- | -------- | ------------------------------------------- |
| `path`   | `string` | The full remote file path to be downloaded. |

#### Processing Logic

1. **Establishes FTP/SFTP Connection**: Connects to the remote server using provided authentication.
2. **Initiates File Download**:
   * Retrieves the specified file using the given `path`.
   * Streams the file content for local storage.
3. **Handles Success & Errors**:
   * If successful, outputs file metadata to the `out` port.
   * If the file is missing or access is denied, sends an error message to `notFound`.
4. **Closes Connection**: Ensures the connection is terminated after execution.

#### Output Data Schema

| Property                  | Type     | Description                                   |
| ------------------------- | -------- | --------------------------------------------- |
| `fileId`                  | `string` | Unique identifier of the downloaded file.     |
| `filename`                | `string` | Name of the downloaded file.                  |
| `md5`                     | `string` | MD5 checksum of the file to ensure integrity. |
| `length`                  | `number` | Size of the file in bytes.                    |
| `path` (if error)         | `string` | The requested file path if not found.         |
| `errorCode` (if error)    | `string` | The FTP/SFTP error code.                      |
| `errorMessage` (if error) | `string` | Description of the error encountered.         |

### Notes

* **Supports FTP & SFTP**: Works with both FTP and secure FTP (SFTP) connections.
* **Error Handling**: Detects missing files and permission errors, sending appropriate error messages.
* **Efficient File Transfer**: Uses streaming for optimized file downloads.

This component is ideal for workflows requiring automated file retrieval from remote servers.
