ExFTP.Storage.FileConnector (ExFTP v1.2.0)
View SourceWhen storage_connector is ExFTP.Storage.FileConnector, this connector will use the file system of where
it is running.
This is the out-of-the-box behavior you'd expect from any FTP server.
๐ Security
Currently, there is no file access management per user.
Authenticated users perform file system actions as if they were the FTP user
โ๏ธ Configuration
Keys
- storage_connector ==
ExFTP.Storage.FileConnector - storage_config ==
%{}
Example
%{
# ... ,
storage_connector: ExFTP.Storage.FileConnector,
storage_config: %{}
}๐ See Also
๐ Resources
Summary
Functions
Create a function/1 that writes a stream to storage
Deletes a given directory
Deletes a given file
Whether a given path is an existing directory
Returns a stream to read the raw bytes of an object specified by a given path
Returns a ExFTP.StorageConnector.content_info/0 representing a given path
Returns a list of ExFTP.StorageConnector.content_info/0 representing each object in a given directory
Returns the current working directory
Creates a directory, given a path
Functions
@spec create_write_func( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state(), opts :: list() ) :: function()
Create a function/1 that writes a stream to storage
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0 - opts :: list of options
๐ป Examples
@impl StorageConnector
def create_write_func(path, connector_state, opts \ []) do
fn stream ->
fs = File.stream!(path)
try do
_ =
stream
|> chunk_stream(opts)
|> Enum.into(fs)
{:ok, connector_state}
rescue
_ ->
{:error, "Failed to transfer"}
end
end
end
@spec delete_directory( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, ExFTP.StorageConnector.connector_state()} | {:error, term()}
Deletes a given directory
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, connector_state}โ On Failure
{:error, err}๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> connector_state = %{current_working_directory: "/"}
iex> dir_to_make = File.cwd!() |> Path.join("new_dir")
iex> {:ok, connector_state} = FileConnector.make_directory(dir_to_make, connector_state)
iex> dir_to_rm = dir_to_make
iex> {:ok, connector_state} = FileConnector.delete_directory(dir_to_rm, connector_state)
iex> FileConnector.directory_exists?(dir_to_rm, connector_state)
false๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec delete_file( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, ExFTP.StorageConnector.connector_state()} | {:error, term()}
Deletes a given file
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, connector_state}โ On Failure
{:error, err}๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec directory_exists?( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: boolean()
Whether a given path is an existing directory
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
`true` or `false`๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> FileConnector.directory_exists?("/tmp", %{current_working_directory: "/"})
true
iex> FileConnector.directory_exists?("/does-not-exist", %{current_working_directory: "/"})
false๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec get_content( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, any()} | {:error, term()}
Returns a stream to read the raw bytes of an object specified by a given path
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, data}โ On Failure
{:error, err}๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> connector_state = %{current_working_directory: "/"}
iex> file_to_get_content = File.cwd!() |> File.ls!() |> Enum.filter(&String.contains?(&1,".")) |> hd()
iex> path = Path.join(File.cwd!(), file_to_get_content)
iex> {:ok, _data} = FileConnector.get_content(path, connector_state)๐ See Also
๐ Resources
- ๐ RFC 959 (page-30)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec get_content_info( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, ExFTP.StorageConnector.content_info()} | {:error, term()}
Returns a ExFTP.StorageConnector.content_info/0 representing a given path
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, %{...}}โ On Failure
{:error, err}๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> connector_state = %{current_working_directory: "/"}
iex> file_to_get_info = File.cwd!() |> File.ls!() |> hd()
iex> path = Path.join(File.cwd!(), file_to_get_info)
iex> {:ok, _content_info} = FileConnector.get_content_info(path, connector_state)๐ See Also
ExFTP.StorageConnector.content_info/0ExFTP.StorageConnector.get_content_info/2get_directory_contents/2
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec get_directory_contents( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, [ExFTP.StorageConnector.content_info()]} | {:error, term()}
Returns a list of ExFTP.StorageConnector.content_info/0 representing each object in a given directory
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, [%{...}, ...]}โ On Failure
{:error, err}๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> connector_state = %{current_working_directory: "/"}
iex> dir = File.cwd!()
iex> {:ok, _content_infos} = FileConnector.get_directory_contents(dir, connector_state)๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec get_working_directory( connector_state :: ExFTP.StorageConnector.connector_state() ) :: String.t()
Returns the current working directory
๐ท๏ธ Params
- connector_state ::
ExFTP.StorageConnector.connector_state/0
๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> FileConnector.get_working_directory(%{current_working_directory: "/"})
"/"๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
@spec make_directory( path :: ExFTP.StorageConnector.path(), connector_state :: ExFTP.StorageConnector.connector_state() ) :: {:ok, ExFTP.StorageConnector.connector_state()} | {:error, term()}
Creates a directory, given a path
๐ท๏ธ Params
- path ::
ExFTP.StorageConnector.path/0 - connector_state ::
ExFTP.StorageConnector.connector_state/0
โคต๏ธ Returns
โ On Success
{:ok, connector_state}โ On Failure
{:error, err}๐ป Examples
iex> alias ExFTP.Storage.FileConnector
iex> connector_state = %{current_working_directory: "/"}
iex> dir_to_make = File.cwd!() |> Path.join("new_dir")
iex> {:ok, connector_state} = FileConnector.make_directory(dir_to_make, connector_state)
iex> FileConnector.directory_exists?(dir_to_make, connector_state)
true
iex> dir_to_rm = dir_to_make
iex> {:ok, connector_state} = FileConnector.delete_directory(dir_to_rm, connector_state)
iex> FileConnector.directory_exists?(dir_to_rm, connector_state)
false๐ See Also
๐ Resources
- ๐ RFC 959 (page-32)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)