FTP
The File Transfer Protocol (FTP) is a standard network protocol used to transfer computer files between a client and server on a computer network. FTP is built on a client-server model architecture and uses separate control and data connections between the client and the server.
This connector is available in the following products and regions:
Service | Class | Regions |
---|---|---|
Logic Apps | Standard | All Logic Apps regions and Integration Service Environments (ISEs) |
Power Automate | Standard | All Power Automate regions except the following: - US Government (GCC High) - US Department of Defense (DoD) |
Power Apps | Standard | All Power Apps regions except the following: - US Government (GCC High) - US Department of Defense (DoD) |
Connector Metadata | |
---|---|
Publisher | Microsoft |
Known issues and limitations
This article describes the operations only for the FTP managed connector, which is available for Azure Logic Apps, Power Automate, and Power Apps. The FTP built-in connector is available only for Standard logic app workflows in Azure Logic Apps. For more information about the FTP built-in connector in Azure Logic Apps, review Connect to FTP servers from workflows in Azure Logic Apps.
FTP triggers now return only metadata or properties, not file content. However, you can follow these triggers with the action named Get file content. To make sure that a trigger returns one file at a time, rather than a list, make sure to enable the trigger's "Split On" option. For more information about this option in Azure Logic Apps, review Trigger multiple runs.
FTP triggers work only on the specified folder, not subfolders. To also check a folder's subfolders, set up a separate flow for each subfolder.
By default, FTP managed connector actions can read or write files that are 50 MB or smaller. To handle files larger than 50 MB, you can use the use the FTP managed connector action named Get file content, which implicitly uses message chunking. Other FTP managed connector actions also support enabling message chunking.
FTP triggers might experience delays or incomplete results when returning newly created, added, or updated files.
When an FTP trigger checks for a newly added or changed file, the trigger also confirms that the file is complete. For example, a file might have changes in progress when the trigger checks the FTP server. To avoid returning an incomplete file, the trigger notes the file's timestamp, but doesn't immediately return the file. Instead, the trigger returns the file only when the trigger checks the server again. Sometimes, this behavior might cause a delay that lasts up to twice the trigger's polling interval. Due to this behavior, the FTP trigger might not return all files at the same time if you disable the FTP trigger's Split On setting,
FTP managed connector triggers might experience missing, incomplete, or delayed results when the "last modified" timestamp is preserved.
Missing results
FTP triggers work by polling, or checking, the FTP file system and looking for any files that changed since the last poll. The FTP managed connector triggers compare file versions using the file's last modified timestamp.
If you create, add, or update file with a timestamp that's earlier than the currently tracked last modified timestamp, the FTP managed connector trigger won't detect this file. On the other hand, the FTP built-in connector trigger in Standard logic app workflows doesn't have this limitation.
So, if you use an external tool or client that creates, adds, or updates files on the FTP server, make sure that you disable any feature in the tool or client that preserves a file's last modified timestamp.
The following table lists some commonly used tools that preserve this timestamp and the steps to disable this feature:
FTP client Action WinSCP Go to Options > Preferences > Transfer > Edit > Preserve timestamp > Disable. FileZilla Go to Transfer > Preserve timestamps of transferred files > Disable. Incomplete or delayed results
When an FTP trigger checks for a newly created, added, or updated file, the trigger also checks whether the file is complete. For example, a file might have changes in progress when the trigger checks the FTP server. To avoid returning an incomplete file, the trigger notes the file's timestamp, but doesn't immediately return the file. Instead, the trigger returns the file only when the trigger checks the server again.
Sometimes, this behavior might cause a delay that lasts as long as almost twice the trigger's polling interval. Due to this behavior, if you disable the FTP trigger's Split On setting, the FTP trigger might not return all files at the same time.
Requirements
The FTP connector requires your FTP host server address and account credentials.
The FTP connector requires access to the FTP server from or through the internet. For more information about allowing traffic to your FTP server using specific IP ranges, review Managed connector IP addresses.
The FTP connector requires the FTP server to operate or accept in passive mode.
The FTP connector requires the FTP server to enable the following commands and to support folders that contain whitespace so the commands can work correctly. For the LIST command, make sure the command returns the
year
component for file timestamps older than 6 months.- APPE
- DELE
- LIST
- MDTM
- RENAME
- RETR
- SIZE
- STOR
For secure FTP, make sure to set up explicit File Transfer Protocol Secure (FTPS), rather than implicit FTPS. Also, some FTP servers, such as ProFTPd, require that you enable the
NoSessionReuseRequired
option if you use Transport Layer Security (TLS) mode, the successor to Secure Socket Layer (SSL).The FTP connector doesn't work with implicit FTPS and supports only explicit FTP over FTPS, which is an extension of TLS.
FTP connections
To improve performance for both the FTP connector and FTP server, you can keep your FTP connection open and active after the connector completes a request.
When you create a connection to an FTP server, the connection profile box that appears has a setting named Close connection after request completion. This setting specifies whether to close the FTP server connection every time after an request completes. If you keep this setting disabled, the connection won't close after a request completes and stays active for future use.
If your workflow instances run in parallel, you might experience intermittent connectivity errors. Some operations in your workflow might forcibly close the connection even while other operations in the workflow are still using that connection.
To avoid this scenario, try the following recommendations:
When you create the connection, enable the Close connection after request completion setting.
Turn off any parallelization or concurrency that's enabled on triggers or actions. For more information about this solution in Azure Logic Apps, review the following documentation:
Avoid running multiple parallel flows.
Use the "Create file" action with and without chunking
For the Create file action, the behavior depends on the action's Allow chunking setting and the size of the file to create:
Allow chunking enabled:
File size is equal or less than 50 MB: The action uploads the file with a single request, uses the original file name, and locks the file during the upload.
File size is greater than 50 MB: The action creates the file with the name format, file-name.new-GUID.ms.partial, and uploads the file using multiple requests, or message chunking. After the action uploads the last chunk, the action renames the file with the original file name.
Allow chunking disabled: The action uploads the file with a single request, uses the original file name, and locks the file during the upload.
Connector how-to guide
For information about how to use the FTP managed connector and built-in connector in Azure Logic Apps, review Connect to FTP servers from workflows in Azure Logic Apps.
General Limits
Name | Value |
---|---|
Maximum number of folders in a single archive. This limit only applies when 'Create folders?' is set to 'Yes'. | 16 |
Maximum number of megabytes being transferred to/from the connector within a bandwidth time interval (per connection) | 1000 |
Bandwidth time interval (in miliseconds) | 60000 |
Creating a connection
The connector supports the following authentication types:
Default | Parameters for creating connection. | All regions | Not shareable |
Default
Applicable: All regions
Parameters for creating connection.
This is not shareable connection. If the power app is shared with another user, another user will be prompted to create new connection explicitly.
Name | Type | Description | Required |
---|---|---|---|
Server Address | string | Server Address | True |
User Name | string | User Name | True |
Password | securestring | Password | True |
FTP Server Port | int | FTP Port Number (example: 21) | |
Enable SSL? | bool | Enable SSL? (True/False) | |
Binary Transport? | bool | Enable Binary Transport? (True/False) | |
Disable Certificate Validation? | bool | Disable Certificate Validation? (True/False) | |
Close connection after request completion | bool | Close FTP connection everytime after request completes? (True/False) |
Throttling Limits
Name | Calls | Renewal Period |
---|---|---|
API calls per connection | 900 | 60 seconds |
Actions
Copy file |
This operation copies a file to an FTP server. If a file is being deleted/renamed on server right after it was copied, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming newly created file. |
Create file |
This operation creates a file. If a file is being deleted/renamed on server right after it was created, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming newly created file. |
Delete file |
This operation deletes a file. |
Extract archive to folder |
This operation extracts an archive file into a folder (example: .zip). |
Get file content |
This operation gets the content of a file. |
Get file content using path |
This operation gets the content of a file using the file path. |
Get file metadata |
This operation gets the metadata for a file. |
Get file metadata using path |
This operation gets the metadata of a file using the file path. |
List files in folder |
This operation gets the list of files and subfolders in a folder. |
List files in root folder |
This operation gets the list of files and subfolders in the root folder. |
Update file |
This operation updates a file. If a file is being deleted/renamed on server right after it was updated, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming recently updated file. |
Copy file
This operation copies a file to an FTP server. If a file is being deleted/renamed on server right after it was copied, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming newly created file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Source url
|
source | True | string |
Url to source file |
Destination file path
|
destination | True | string |
Destination file path, including target filename |
Overwrite?
|
overwrite | boolean |
Overwrites the destination file if set to 'true' |
Returns
Blob metadata
- Body
- BlobMetadata
Create file
This operation creates a file. If a file is being deleted/renamed on server right after it was created, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming newly created file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Folder path
|
folderPath | True | string |
Select a folder |
File name
|
name | True | string |
Name of the file |
File content
|
body | True | binary |
Content of the file |
Get all file metadata
|
ReadFileMetadataFromServer | boolean |
Get all file metadata from the SFTP server after file creation is complete. If this is false, some metadata properties may not be returned such as last modified time, etc. |
Returns
Blob metadata
- Body
- BlobMetadata
Delete file
This operation deletes a file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File
|
id | True | string |
Select a file |
Extract archive to folder
This operation extracts an archive file into a folder (example: .zip).
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Source archive file path
|
source | True | string |
Path to the archive file |
Destination folder path
|
destination | True | string |
Path to the destination folder |
Overwrite?
|
overwrite | boolean |
Overwrites the destination files if set to 'true' |
|
Create folders?
|
createFolders | boolean |
Extracts folders from archive if set to 'true' |
Returns
- response
- array of BlobMetadata
Get file content
This operation gets the content of a file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File
|
id | True | string |
Select a file |
Infer Content Type
|
inferContentType | boolean |
Infer content-type based on extension |
Returns
The content of the file.
- File Content
- binary
Get file content using path
This operation gets the content of a file using the file path.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File path
|
path | True | string |
Select a file |
Infer Content Type
|
inferContentType | boolean |
Infer content-type based on extension |
Returns
The content of the file.
- File Content
- binary
Get file metadata
This operation gets the metadata for a file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File
|
id | True | string |
Select a file |
Returns
Blob metadata
- Body
- BlobMetadata
Get file metadata using path
This operation gets the metadata of a file using the file path.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File path
|
path | True | string |
Select a file |
Returns
Blob metadata
- Body
- BlobMetadata
List files in folder
This operation gets the list of files and subfolders in a folder.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Folder
|
id | True | string |
Select a folder |
Returns
- response
- array of BlobMetadata
List files in root folder
This operation gets the list of files and subfolders in the root folder.
Returns
- response
- array of BlobMetadata
Update file
This operation updates a file. If a file is being deleted/renamed on server right after it was updated, connector may return HTTP 404 error by it's design. Please use a delay for 1 minute before deleting or renaming recently updated file.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
File
|
id | True | string |
Select a file |
File content
|
body | True | binary |
Content of the file |
Returns
Blob metadata
- Body
- BlobMetadata
Triggers
When a file is added or modified (properties only) |
This operation triggers a flow when one or more files are added or modified in a folder. This trigger will only fetch the file metadata. To get the file content, you can use the "Get file content" operation. The trigger relies on the last modified time of a file. If a file is being created by a third-party client, the preservation of the last modified time should be disabled in the client. The trigger does not fire if a file is added/updated in a subfolder. If it is required to trigger on subfolders, multiple triggers should be created. |
When a file is added or modified [DEPRECATED] |
This operation triggers a flow when a file is added or modified in a folder. The trigger will fetch both the file metadata as well as the content of the file. The trigger relies on the last modified time of a file. If a file is being created by a third-party client, the preservation of the last modified time should be disabled in the client. Files larger than 50 megabytes are skipped by the trigger. The trigger does not fire if a file is added/updated in a subfolder. If it is required to trigger on subfolders, multiple triggers should be created. |
When a file is added or modified (properties only)
This operation triggers a flow when one or more files are added or modified in a folder. This trigger will only fetch the file metadata. To get the file content, you can use the "Get file content" operation. The trigger relies on the last modified time of a file. If a file is being created by a third-party client, the preservation of the last modified time should be disabled in the client. The trigger does not fire if a file is added/updated in a subfolder. If it is required to trigger on subfolders, multiple triggers should be created.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Folder
|
folderId | True | string |
Select a folder |
Number of files to return
|
maxFileCount | integer |
Maximum number of files to return by single trigger run (1-100). Note that 'Split On' setting can force trigger to process each item individually. |
Returns
Blob metadata
- List of Files
- BlobMetadata
When a file is added or modified [DEPRECATED]
This operation triggers a flow when a file is added or modified in a folder. The trigger will fetch both the file metadata as well as the content of the file. The trigger relies on the last modified time of a file. If a file is being created by a third-party client, the preservation of the last modified time should be disabled in the client. Files larger than 50 megabytes are skipped by the trigger. The trigger does not fire if a file is added/updated in a subfolder. If it is required to trigger on subfolders, multiple triggers should be created.
Parameters
Name | Key | Required | Type | Description |
---|---|---|---|---|
Folder
|
folderId | True | string |
Select a folder |
Include file content
|
includeFileContent | boolean |
If set to true, file content will also be retrieved along with the trigger response |
|
Infer Content Type
|
inferContentType | boolean |
Infer content-type based on extension |
Returns
The content of the file.
- File Content
- binary
Definitions
BlobMetadata
Blob metadata
Name | Path | Type | Description |
---|---|---|---|
Id
|
Id | string |
The unique id of the file or folder. |
Name
|
Name | string |
The name of the file or folder. |
DisplayName
|
DisplayName | string |
The display name of the file or folder. |
Path
|
Path | string |
The path of the file or folder. |
LastModified
|
LastModified | date-time |
The date and time the file or folder was last modified. |
Size
|
Size | integer |
The size of the file or folder. |
MediaType
|
MediaType | string |
The media type of the file or folder. |
IsFolder
|
IsFolder | boolean |
A boolean value (true, false) to indicate whether or not the blob is a folder. |
ETag
|
ETag | string |
The etag of the file or folder. |
FileLocator
|
FileLocator | string |
The filelocator of the file or folder. |
binary
This is the basic data type 'binary'.