BFTPClient - Esempi
Connessione e operazioni asincrone
using B.BNet;
using BFTPClient ftp = new BFTPClient
{
UseSSL = true,
UseImplicitSSL = false,
ProtectDataChannel = true,
Timeout = 15000
};
if (!await ftp.ConnectAsync("ftp.example.com", 21) ||
!await ftp.LoginAsync(username, password))
{
foreach (Exception error in ftp.ExceptionList)
{
// Gestire secondo le regole dell'applicazione.
}
return;
}
List<BFtpItem>? items = await ftp.ReadDirectoryAsync("/incoming");
bool downloaded = await ftp.DownloadFileAsync(
"/incoming/data.bif",
localFilePath);
ftp.Disconnect();
Il client usa connessioni dati FTP passive (PASV). UseSSL = true abilita FTPS; UseImplicitSSL distingue handshake immediato e AUTH TLS. Con ProtectDataChannel = true, dopo il login vengono richiesti PBSZ 0 e PROT P.
Costruttore con connessione immediata
using BFTPClient ftp = new BFTPClient(
"ftp.example.com",
21,
username,
password,
useSSL: false,
timeout: 10000);
List<string>? rawRows = ftp.ListDirectory("/outgoing");
Questo costruttore si connette ed effettua il login. Lancia InvalidOperationException se la connessione fallisce e UnauthorizedAccessException se fallisce il login. Per gestire gli errori tramite ExceptionList, usare il costruttore vuoto e chiamare separatamente Connect e Login.
Upload dai tipi B-Arts
using B.BIO;
BFile file = new BFile(localFilePath);
bool uploaded = await ftp.UploadFileAsync(file, "/incoming/data.bif");
byte[] payload = CreatePayload();
bool uploadedBytes = await ftp.UploadFileAsync(payload, "/incoming/payload.bin");
Sono disponibili overload per percorso locale, byte[] e BFile, sia sincroni sia asincroni. Per il download sono disponibili percorso locale, byte[] e BFile.
Diagnostica e sicurezza TLS
if (!uploaded)
{
string protocolLog = ftp.LogText.Text;
IReadOnlyList<Exception> errors = ftp.ExceptionList;
}
AcceptAllCertificates = true disabilita la validazione del certificato TLS e deve essere limitato ad ambienti controllati di sviluppo o collaudo. Non proporlo come impostazione di produzione.
