No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config Resolve Logging Functions Connection Issue Jan 19, 2018
lib change syntax for ssh_opts filter for backwards compatibility Jan 19, 2018
test Resolve Logging Functions Connection Issue Jan 19, 2018
.gitignore Initial commit Dec 31, 2016
LICENSE Initial commit Dec 31, 2016
README.md Release 0.2.1 Feb 11, 2017
mix.exs version 0.2.6 Jan 19, 2018
mix.lock adding doc Jan 15, 2017
sftp_ex.iml Initial commit Dec 31, 2016

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

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, 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
```
  1. Ensure sftp_ex is started before your application:
```elixir
def application do
  [applications: [:sftp_ex]]
end
```