Lyo.Ftp.Client
2.0.1
dotnet add package Lyo.Ftp.Client --version 2.0.1
NuGet\Install-Package Lyo.Ftp.Client -Version 2.0.1
<PackageReference Include="Lyo.Ftp.Client" Version="2.0.1" />
<PackageVersion Include="Lyo.Ftp.Client" Version="2.0.1" />
<PackageReference Include="Lyo.Ftp.Client" />
paket add Lyo.Ftp.Client --version 2.0.1
#r "nuget: Lyo.Ftp.Client, 2.0.1"
#:package Lyo.Ftp.Client@2.0.1
#addin nuget:?package=Lyo.Ftp.Client&version=2.0.1
#tool nuget:?package=Lyo.Ftp.Client&version=2.0.1
Lyo.Ftp.Client
FluentFTP wrapper for FTP/FTPS used by Lyo hosts and storage adapters (Lyo.FileStorage.Ftp). Call *Async from hosts (Task + CancellationToken). Those methods hit FluentFTP's async API and the await-safe pool/per-client gates. Sync methods wait on that async path. Pooled connections are leased, POSIX paths stay under RootRemoteDirectory through Lyo.Common.Core.Pathing.PathHelpers, and FTPS can encrypt the session. ILogger and ftp.* metrics are recorded. Callers may run concurrently up to MaxPooledClients. Do not share one leased Stream across threads. FtpFileSystem adapts IFtpClient onto Lyo.IO.FileSystem.IFileSystem (AddFtpFileSystem).
Features
- Async. Hosts and adapters should call
*Async. Sync wrappers wait on the async implementation. NoTask.Run. - Pooled leases. Up to
MaxPooledClientsFluentFTP clients at once. Each client serializes work across awaits with aSemaphoreSlim. - Concurrent callers. Parallelism stops at the pool size. A single leased stream is not thread-safe.
- IFileSystem.
FtpFileSystemwrapsIFtpClient. Register withAddFtpFileSystem. - Path jail. Paths stay under
RootRemoteDirectorywithPathStyle.Posix. - FTPS.
FtpEncryptionMode(None/Explicit/Implicit) plusFtpTlsPolicy(ValidateCertificate/AcceptAny). - Logging and metrics.
ILoggerandIMetrics(ftp.connect,ftp.operation,ftp.bytes,ftp.pool,ftp.errors). TurningEnableMetricsoff usesNullMetrics. - DI.
AddFtpClient/AddFtpClientFromConfiguration.
Examples
DI setup
services.AddFtpClient(o =>
{
o.Host = "ftp.example.com";
o.Username = "lyo";
o.Password = secret;
o.RootRemoteDirectory = "/data/lyo";
o.Port = PortInfo.Ftp;
o.EncryptionMode = FtpEncryptionMode.None;
});
Upload and download asynchronously
await client.UploadAsync("report.bin", bytes, ct);
var copy = await client.DownloadBytesAsync("report.bin", ct);
Dependencies
Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).
Lyo.Common.Metadata(direct, lyo)Lyo.Exceptions(direct, lyo)Lyo.IO.FileSystem(direct, lyo)Lyo.Metrics(direct, lyo)FluentFTP54.2.0(direct, third-party)Microsoft.Extensions.Configuration.Binder10.0.5(direct, microsoft)Microsoft.Extensions.DependencyInjection.Abstractions10.0.5(direct, microsoft)Microsoft.Extensions.Logging.Abstractions10.0.5(direct, microsoft)Lyo.Common.Core(transitive, lyo)Microsoft.Bcl.AsyncInterfaces10.0.5(transitive, microsoft, netstandard2.0)System.Memory4.6.3(transitive, microsoft, netstandard2.0)System.Text.Json10.0.5(transitive, microsoft, netstandard2.0)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- FluentFTP (>= 54.2.0)
- Lyo.Common.Metadata (>= 2.0.0)
- Lyo.Exceptions (>= 2.0.0)
- Lyo.IO.FileSystem (>= 2.0.1)
- Lyo.Metrics (>= 2.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
-
net10.0
- FluentFTP (>= 54.2.0)
- Lyo.Common.Metadata (>= 2.0.0)
- Lyo.Exceptions (>= 2.0.0)
- Lyo.IO.FileSystem (>= 2.0.1)
- Lyo.Metrics (>= 2.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Lyo.Ftp.Client:
| Package | Downloads |
|---|---|
|
Lyo.FileStorage.Ftp
FTP-backed IFileStorageService using Lyo.Ftp.Client (physical IO only; no multipart/presign in v1). |
|
|
Lyo.IO.Temp.Ftp
FTP-backed IIOTempStorageProvider using Lyo.Ftp.Client. |
GitHub repositories
This package is not used by any popular GitHub repositories.