ExFTP.Storage.FileConnector (ExFTP v1.0.4)
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/0
ExFTP.StorageConnector.get_content_info/2
get_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!)