VoDA.FtpServer — это простая библиотека FTP-сервера. Эта библиотека упрощает взаимодействие с протоколом FTP вплоть до уровня событий. Все запросы к серверу, связанные с авторизацией или работой с данными, вызывают события, которые вы должны реализовать.
Для запуска сервера необходимо создать объект FtpServerBuilder, настроить его с помощью функций, как показано в примере ниже. Дополнительные сведения о каждой функции см. в разделе ConfigurationParameters. После настройки вызовите функцию Build()
чтобы создать сервер.
Пример FTP-сервера для работы с файловой системой приведен в Тестовом проекте.
var server = new FtpServerBuilder ( )
. ListenerSettings ( ( config ) =>
{
config . Port = 21 ; // enter the port
config . ServerIp = System . Net . IPAddress . Any ;
} )
. Log ( ( config ) =>
{
config . Level = LogLevel . Information ; // enter log level. Default: Information
} )
. Certificate ( ( config ) =>
{
config . CertificatePath = ". \ server.crt" ;
config . CertificateKey = ". \ server.key" ;
} )
. Authorization ( ( config ) =>
{
config . UseAuthorization = true ; // enable or disable authorization
config . UsernameVerification += ( username ) => { .. . } ; // username verification
config . PasswordVerification += ( username , password ) => { .. . } ; //verification of username and password
} )
. FileSystem ( ( fs ) =>
{
fs . OnDeleteFile += ( client , path ) => { .. . } ; // delete file event
fs . OnRename += ( client , from , to ) => { .. . } ; // rename item event
fs . OnDownload += ( client , path ) => { .. . } ; // download file event
fs . OnGetList += ( client , path ) => { .. . } ; // get items in folder event
fs . OnExistFile += ( client , path ) => { .. . } ; // file check event
fs . OnExistFoulder += ( client , path ) => { .. . } ; // folder check event
fs . OnCreate += ( client , path ) => { .. . } ; // file creation event
fs . OnAppend += ( client , path ) => { .. . } ; // append file event
fs . OnDeleteFolder += ( client , path ) => { .. . } ; // remove folder event
fs . OnUpload += ( client , path ) => { .. . } ; // upload file event
fs . OnGetFileSize += ( client , path ) => { .. . } ; // get file size event
fs . OnGetFileModificationTime += ( client , path ) => { .. . } ; // returns the last modified date of the file
} )
. Build ( ) ;
// Start FTP-serer
server . StartAsync ( System . Threading . CancellationToken . None ) . Wait ( ) ;
Или вы можете использовать свой собственный класс, который наследуется от класса контекста. Пример ниже.
В этом примере класс MyAuthorization
наследует от VoDA.FtpServer.Contexts.AuthorizationOptionsContext
, а класс MyFileSystem
наследует от VoDA.FtpServer.Contexts.FileSystemOptionsContext
var server = new FtpServerBuilder ( )
. ListenerSettings ( ( config ) =>
{
config . Port = 21 ; // enter the port
config . ServerIp = System . Net . IPAddress . Any ;
} )
. Log ( ( config ) =>
{
config . Level = LogLevel . Information ; // enter log level. Default: Information
} )
. Certificate ( ( config ) =>
{
config . CertificatePath = ". \ server.crt" ;
config . CertificateKey = ". \ server.key" ;
} )
. Authorization < MyAuthorization > ( )
. FileSystem < MyFileSystem > ( )
. Build ( ) ;
// Start FTP-serer
server . StartAsync ( System . Threading . CancellationToken . None ) . Wait ( ) ;
Полный пример см. в Тестовом проекте.