An Elixir wrapper around the Erlang SFTP application. This allows for the use of Elixir Streams to transfer files via SFTP.
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
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
If available in Hex, the package can be installed as:
- Add
sftp_ex
to your list of dependencies inmix.exs
:
```elixir
def deps do
[{:sftp_ex, "~> 0.2.1"}]
end
```
- Ensure
sftp_ex
is started before your application:
```elixir
def application do
[applications: [:sftp_ex]]
end
```