README.md

# SftpEx

An Elixir wrapper around the Erlang SFTP application. This allows for the use of Elixir Streams to 
transfer files via SFTP. 
 
## Creating a Connection

The following is an example of creating a connection with a username and password. 

    {:ok, conn} = SftpEx.connect([host: 'somehost', user: 'someuser', password: 'somepassword'])

Other connection arguments can be found in the [Erlang documentation]("http://erlang.org/doc/man/ssh.html#connect-3") 


## Streaming Files

An example of writing a file to a server is the following.
    
    stream = File.stream!("filename.txt")
        |> Stream.into(SftpEx.stream!(connection,"/home/path/filename.txt"))
        |> Stream.run
   
A file can be downloaded as follows - in this example a remote file "test2.csv" is downloaded to 
the local file "filename.txt" 

    SftpEx.stream!(connection,"test2.csv") |> Stream.into(File.stream!("filename.txt")) |> Stream.run

or using Enum.into

    SftpEx.stream!(connection, "test2.csv") |> Enum.into(File.stream!("filename.txt"))
    
This follows the same pattern as Elixir IO streams so a file can be transferred
from one server to another via SFTP as follows.

    stream = SftpEx.stream!(connection,"/home/path/filename.txt")
    |> Stream.into(SftpEx.stream!(connection2,"/home/path/filename.txt"))
    |> Stream.run

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:

  1. Add `sftp_ex` to your list of dependencies in `mix.exs`:

    ```elixir
    def deps do
      [{:sftp_ex, "~> 0.2.1"}]
    end
    ```

  2. Ensure `sftp_ex` is started before your application:

    ```elixir
    def application do
      [applications: [:sftp_ex]]
    end
    ```