////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
:documentationPath: /plugins/actions/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/actions/ftpput/src/main/doc/ftpput.adoc
= Put a file with FTP

== Description

Use the Put a file with FTP action to upload a file to an FTP server.

== Options

=== General

[width="90%", options="header"]
|===
|Option|Description
|Workflow action name|The name of the workflow action. *Note*: This name has to be unique in a single workflow. A workflow action can be placed several times on the canvas, however it will be the same workflow action.
|FTP server name/IP address|The name of the server or the IP address.
|Port|Port number of the FTP server.
|Username|The user name associated with FTP server account.
|Password|The password associated the FTP server account.
|Proxy host|Proxy server host name.
|Proxy port|Proxy server port number.
|Proxy username|Proxy server account user name.
|Proxy password|Proxy server account password.
|Binary mode|Enable if files must be transferred in binary mode.
|Timeout|The FTP server timeout in seconds.
|Use Active FTP connection|Enable if you are connecting to the FTP server using Active mode; you must set your firewall to accept connections to the port that your FTP client will open. The default is Passive mode.
|Control Encoding|Encoding matters when retrieving file names that contain special characters. For Western Europe and the USA, ISO-8859-1 usually suffices. Select encoding that is valid for your server. 
|===

=== Files

[width="90%", options="header"]
|===
|Option|Description
|Local directory|The local directory from which to upload.
|Browse...|Browse the filesystem for a local directory.
|Wildcard (regular expression)|
|Remove files after transferal|Whether or not to remove files after they've been uploaded.
|Don't overwrite files|Skip already existing files.
|Remote directory|The remote directory.
|Test folder|Test if the remote directory exists.
|===

=== Socks Proxy

[width="90%", options="header"]
|===
|Option|Description
|Host|Socks Proxy host name.
|Port|Socks Proxy port number.
|Username|User name associated with the Socks Proxy account.
|Password|Password associated with the Socks Proxy account.
|===
