Работа с протоколом FTP

Одним из преимуществ использования Golang является его пакет http , который обеспечивает простой способ создания надежных API REST.

К сожалению, он не предоставляет из коробки возможность построить FTP-сервер или подключиться к FTP-серверу.

В этой статье мы рассмотрим это, продемонстрировав использование двух сторонних пакетов, которые позволяют это.

Подключение к FTP-серверу

Самый надежный и широко используемый пакет, обеспечивающий сборку FTP-клиента Julien .

Монтаж

go get -u github.com/jlaffaye/ftp

Применение

Вы можете подключить целевой FTP-сервер, как показано в следующем фрагменте кода:


client, err := fto.Dial("localhost:21")
if err != nil {
  return err
}

if err := client.Login("root", "password"); err != nil {
  return err
}

Следующий фрагмент кода отображает, загружает и удаляет все файлы, соответствующие дикой карте.


entries, _ := client.List(wildcard)

for _, entry := range entries {
  name := entry.Name
  reader, err := client.Retr(name)
  if err != nil {
    panic(err)
  }
  client.Delete(name)
}

Для более продвинутых вариантов использования вы можете прочитать документацию .

Создание FTP-сервера

Очень просто создать FTP-сервер, используя пакет goftp / server , который обеспечивает инфраструктуру для построения FTP-сервера с любым типом хранилища данных (файловая система, AWS3 и т. Д.).

Монтаж


go get github.com/goftp/server

Применение

Чтобы запустить сервер, вам необходимо разработать или использовать драйвер, который реализует интерфейс, который действует как мост между протоколом FTP и вашим желаемым хранилищем:


type Driver interface {
    Init(*Conn)
    Stat(string) (FileInfo, error)
    ChangeDir(string) error
    ListDir(string, func(FileInfo) error) error
    DeleteDir(string) error
    DeleteFile(string) error
    Rename(string, string) error
    MakeDir(string) error
    GetFile(string, int64) (int64, io.ReadCloser, error)
    PutFile(string, io.Reader, bool) (int64, error)
}

В настоящее время доступны следующие драйверы:

Файловая система Postfix FileSystem

Посмотрим, как мы можем использовать драйвер файловой системы для создания собственного FTP-сервера. Мы должны установить пакет:

go get github.com/goftp/file-driver

Затем мы должны инициализировать и запустить ftp-сервер с помощью следующего фрагмента кода:


factory := &filedriver.FileDriverFactory{
  RootPath: "path_to_directory_that_will_store_all_files",
  Perm: server.NewSimplePerm("root", "root")
}

opts := &server.ServerOpts{
  Factory: factory,
  Port: 2001,
  Hostname: "127.0.0.1",
}
server  := server.NewServer(opts)
server.ListenAndServe()

В RootPathопределяет , где файлы будут сохранены, в то время как Permполе определяет , как пользователь собирается пройти проверку подлинности. В настоящее время пакет поддерживает однопользовательскую аутентификацию с использованием SimplePermили вы можете использовать более совершенную аутентификацию LevelDB .

results matching ""

    No results matching ""