FluentStorage.FTP
8.0.11
Prefix Reserved
.NET 7.0
This package targets .NET 7.0. The package is compatible with this framework or higher.
.NET Standard 2.0
This package targets .NET Standard 2.0. The package is compatible with this framework or higher.
dotnet add package FluentStorage.FTP --version 8.0.11
NuGet\Install-Package FluentStorage.FTP -Version 8.0.11
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FluentStorage.FTP" Version="8.0.11" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluentStorage.FTP" Version="8.0.11" />
<PackageReference Include="FluentStorage.FTP" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FluentStorage.FTP --version 8.0.11
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: FluentStorage.FTP, 8.0.11"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FluentStorage.FTP@8.0.11
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FluentStorage.FTP&version=8.0.11
#tool nuget:?package=FluentStorage.FTP&version=8.0.11
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Please read the Migration Guide to help you migrate from older versions to FluentStorage 8!
FluentStorage 8.0.11
- FluentStorage
- New: Add rule-based filtering support in
DownloadDirectoryandUploadDirectoryfor all storage providers - New: Add rule engine and rules from FluentFTP:
ObjectNameRule,ObjectNameRegexRule,DirectoryNameRule,DirectoryNameRegexRule,ExtensionRule - New: Add new rule types for path checking:
FullPathRule,FullPathRegexRule - Fix: Fix all logic issues in rules based on unit test suite
- Fix: Support case-insensitive extension comparison in
ExtensionRule - Fix:
DownloadObjectensures parent directory exists and fix existance check - Fix:
DownloadDirectoryreports progress on successful transfers too - Fix:
UploadDirectoryreports progress on successful transfers too - Paths:
StoreObject: MakeFullPathinstant by computing it at time of construction rather than dynamically - Paths:
StoreObject: AddInputproperty to read the raw path given by the provider
- New: Add rule-based filtering support in
- FluentStorage.FTP
- Fix: Improve
DownloadObjectAPI to have consistant behaviour
- Fix: Improve
- FluentStorage.SFTP
- Fix: Improve
DownloadObjectAPI to have consistant behaviour
- Fix: Improve
- FluentStorage.Alibaba
- Fix: All API should use a single constructor for
StoreObject
- Fix: All API should use a single constructor for
- FluentStorage.Tests
- New: Extensive unit test suite for rule engine under
RuleTests
- New: Extensive unit test suite for rule engine under
FluentStorage 8.0.10
- FluentStorage
- Fix:
CreateDirectorywill not throw exceptions by default, allowing it to be called on cloud stores - Fix:
DeleteDirectoryhas a default implementation for all cloud stores, to delete all objects in a virtual folder - Change:
DiskStore:DeleteObjectwill no longer delete objects in a virtual directory - Change:
MemoryStore:DeleteObjectwill no longer delete objects in a virtual directory - Fix:
MemoryStore:ObjectExistsnormalizes the input path - New:
MemoryStore: Implement all missing API:OpenRange,OpenWrite,IsSeekable,GetObjectLength,CreateDirectory,DirectoryExists,DeleteDirectory,MoveDirectory,MoveObject
- Fix:
- FluentStorage.AWS
- New: Implement fast
DirectoryExistsvirtual directory check by using aListObjectsV2query withMaxKeysset - Fix: Fix access modifiers for
DigitalOceanSpacesStoragefactory API - Fix: All API now calls
StoragePath.Normalizeto support the unified path system - Change:
DeleteObjectwill no longer delete objects in a virtual directory
- New: Implement fast
- FluentStorage.Azure.Blobs
- New: Implement fast
DirectoryExistsvirtual directory check by using aGetBlobsAsyncquery
- New: Implement fast
- FluentStorage.Azure.Files
- Change:
DeleteObjectwill no longer delete objects in a virtual directory
- Change:
- FluentStorage.GCP
- New: Implement fast
DirectoryExistsvirtual directory check by using aExecuteAsyncquery withPageSizeset - Fix: All API now calls
StoragePath.Normalizeto support the unified path system - Fix:
OpenRangewill not throw when the object is missing (consistant with other API) - Change:
DeleteObjectwill no longer delete objects in a virtual directory
- New: Implement fast
- FluentStorage.FTP
- Fix: All API now calls
StoragePath.Normalizeto support the unified path system - Change:
DeleteObjectwill no longer delete objects in a virtual directory
- Fix: All API now calls
- FluentStorage.SFTP
- Fix:
DeleteDirectoryno longer normalizes paths multiple times
- Fix:
- FluentStorage.Alibaba
- New: Implement fast
DirectoryExistsvirtual directory check by using aListObjectsquery withMaxKeysset
- New: Implement fast
- FluentStorage.Minio
- New: Implement fast
DirectoryExistsvirtual directory check by using aListObjectsArgsquery - Fix:
OpenRead: Opening non-existant objects will no longer throw exceptions - Fix:
OpenRange: Opening non-existant objects will no longer throw exceptions - Fix:
OpenWritewill return null if the object already exists, instead of throwing exceptions - Fix: Consistantly catch object not found exceptions using
ObjectNotFoundException
- New: Implement fast
- FluentStorage.Mongo
- New: Implement fast
DirectoryExistsvirtual directory check by querying for a single file whose filename begins with the directory prefix - Fix:
OpenRead: Opening non-existant objects will no longer throw exceptions - Fix:
OpenRange: Opening non-existant objects will no longer throw exceptions - Fix:
OpenWritewill return null if the object already exists, instead of throwing exceptions - Fix: Credential connection uses
SCRAM-SHA-256by default
- New: Implement fast
- FluentStorage.Tests
- New: Add provider-specific config settings for Alibaba OSS, Backblaze B2, Cloudflare R2, DigitalOcean Spaces, Hetzner, Minio S3, Minio Native, Vultr, Wasabi, Mongo GridFS
- New: Add integration test suites for Alibaba OSS, Backblaze B2, Cloudflare R2, DigitalOcean Spaces, Hetzner, Minio S3, Minio Native, Vultr, Wasabi, Mongo GridFS
- New: Update
fluentstorage.yaml.templatewith new provider-specific settings
FluentStorage 8.0.9
- FluentStorage
- Fix:
UploadDirectoryis more efficient for filesystem-based storage providers
- Fix:
- FluentStorage.Tests
- Add support for loading test config from YAML file
fluentstorage.yaml - Add
fluentstorage.yaml.templatebased on required test config schema - Add tests for FTP and SFTP using new config system
- Add provider-specific assertions to ensure that required test config settings are filled
- Remove unused
LogMagicandConfig.Netpackages, and addYamlDotNet - Split
IStoreTestinto multiple partial classes and improve test codebase organization - New tests for directory upload, directory download, roundtrip
- Fix: Disable tests that are malfunctioning with FTP/SFTP
- Add support for loading test config from YAML file
- FluentStorage.FTP
- Fix: Any file uploads/writes will automatically create the directory structure as required
- Fix:
CreateDirectory: No error is thrown if the folder already exists - Fix:
SetBytesnow correctly uploads zero-byte file data
- FluentStorage.SFTP
- Fix: All API now uses Async API of
SftpClientrather than the old sync API - Fix:
DownloadObjectandUploadObjecthad invalid file existance checks - Fix:
DownloadObjectnow correctly downloads file data (fix stream disposing issue) - Fix:
SetBytesandUploadObjectwill automatically create the directory structure as required - Fix:
SetBytesnow correctly uploads zero-byte file data - Fix:
CreateDirectory: No error is thrown if the folder already exists - Fix:
GetObjectInfoandGetObjectsInfocorrectly computes SFTP remote paths - Fix:
MaxResultsandBrowseFilterfiltering is more efficient during directory listing - Fix:
ListDirectoryandListObjectswill return a blank list if nothing is found instead of throwing an error - Fix:
ListDirectoryandListObjectswill correctly enumerate files inside subdirectories
- Fix: All API now uses Async API of
- FluentStorage.Azure.Queues
- Remove all usage of Newtonsoft.Json
- Cleanup JSON conversion and move all static utilities into
FluentStorage.Azure.Queues.UtilsNS
FluentStorage 8.0.8
- FluentStorage
OpenSeekable: Return null if the stream cannot be created or the object length cannot be determined
FluentStorage 8.0.7
- FluentStorage
- Transfer: Add new APIs to
DownloadDirectoryandUploadDirectory, with default implementation for all stores - Paths: Added
StoragePath.GetRelativeDiskPathandStoragePath.GetRelativeCloudPathto compute relative paths
- Transfer: Add new APIs to
- FluentStorage.FTP
- Transfer: Special handling using native FluentFTP APIs for
DownloadDirectoryandUploadDirectory
- Transfer: Special handling using native FluentFTP APIs for
FluentStorage 8.0.6
- FluentStorage
- Paths: A new unified path system has been introduced across all providers!
- Paths:
StoragePath.Normalizehas been completely rewritten to enable the unified path system - Paths:
StoragePath.Combine,.Splitand.GetParentare completely rewritten for performance - Paths:
StoragePath.ComparePath,.RemoveRootFolder,.GetRootFolderand.Renamehave been removed - DiskStore:
GetObjectswill now return all objects in the main directory recursively by default - Move all sinks into
FluentStorage.SinksNS - Move
DelegatedStreamandNonCloseableStreamintoFluentStorage.Storage.SinksNS - Rename
SinkedBlobStoragetoSinkedStore - Remove
RandomGeneratorand move it into testing project
- FluentStorage.SFTP
- Paths: New SFTP path normalization system that works with updated
StoragePathnormalization
- Paths: New SFTP path normalization system that works with updated
- FluentStorage.GCP
- Paths: All APIs updated to use the new
StoragePathnormalization to support unified paths
- Paths: All APIs updated to use the new
- FluentStorage.Minio
- Paths: All APIs updated to use the new
StoragePathnormalization to support unified paths
- Paths: All APIs updated to use the new
- FluentStorage.Mongo
- Paths: All APIs updated to use the new
StoragePathnormalization to support unified paths
- Paths: All APIs updated to use the new
- FluentStorage.Alibaba
- Paths: All APIs updated to use the new
StoragePathnormalization to support unified paths
- Paths: All APIs updated to use the new
- FluentStorage.Tests
- Merge all tests into a single project, cleanly seperating unit and integration tests
- New tests for path normalization (
StoragePath.Normalize), path combination (StoragePath.Combine) and path splitting (StoragePath.Split) - New tests for
SeekableStreamused in seeking/streaming - New tests for
IStoreoperations and fixes made to local disk implementation
FluentStorage 8.0.5
- FluentStorage
- IStore: Implement new object versioning APIs, tagging APIs and storage tier APIs
- IStore: Change
IsFileSystem,IsSeekableto async to align with other feature check APIs - IStore: Add
IsVersioned,IsTaggedandIsTieredto check if providers support new features - Assertions: Remove
AssertFullPathand handle it inline in all APIs
- FluentStorage.AWS
- Add versioning APIs:
IsVersioned,ListObjectVersions,GetObjectVersion,RestoreObjectVersion,DeleteObjectVersion - Add tagging APIs:
IsTagged,GetObjectTags,SetObjectTags,DeleteObjectTags - Add storage tier APIs:
IsTiered,GetObjectTier,SetObjectTier
- Add versioning APIs:
- FluentStorage.Azure.Blob
- Add versioning APIs:
IsVersioned,ListObjectVersions,GetObjectVersion,RestoreObjectVersion,DeleteObjectVersion - Add tagging APIs:
IsTagged,GetObjectTags,SetObjectTags,DeleteObjectTags - Add storage tier APIs:
IsTiered,GetObjectTier,SetObjectTier
- Add versioning APIs:
- FluentStorage.GCP
- Rewrite path normalization to be simpler and not overly aggressive
- Add versioning APIs:
IsVersioned,ListObjectVersions,GetObjectVersion,RestoreObjectVersion,DeleteObjectVersion - Add tagging APIs:
IsTagged,GetObjectTags,SetObjectTags,DeleteObjectTags - Add storage tier APIs:
IsTiered,GetObjectTier,SetObjectTier
- FluentStorage.Alibaba
- Add tagging APIs:
IsTagged,GetObjectTags,SetObjectTags,DeleteObjectTags
- Add tagging APIs:
- FluentStorage.Minio
- Add tagging APIs:
IsTagged,GetObjectTags,SetObjectTags,DeleteObjectTags - Add storage tier APIs:
IsTiered,GetObjectTier,SetObjectTier
- Add tagging APIs:
FluentStorage 8.0.4
- FluentStorage
- Disk: Fix
ListObjectsand addGetServer&MoveObjectAPIs - Streams: Add
NonSeekableStreamto the core package - Rename core classes:
StoreObject,MemoryMessenger,DiskStore,MemoryStore - Move factory classes from
FluentStorage.AWS.Factory,FluentStorage.Alibaba.FactoryandFluentStorage.Minio.Factoryto root NS
- Disk: Fix
- FluentStorage.Mongo
- New: MongoDB GridFS storage provider using native MongoDB driver. Introduces the factory API
MongoGridStorageand store classMongoGridStore.
- New: MongoDB GridFS storage provider using native MongoDB driver. Introduces the factory API
FluentStorage 8.0.3
- Add APIs to all providers:
GetObjectLengthand integrate it with streaming/seeking implementation
FluentStorage 8.0.2
- Add streaming/seeking APIs to all providers:
OpenRange,OpenSeekable
FluentStorage 8.0.1
- Fix some issues with the original v8 release.
FluentStorage 8.0.0
- FluentStorage
- All cloud storage API methods have been redesigned to improve productivity and ease of use.
- All extension-method factory API has been removed: For example
StorageFactory.BlobsandStorageFactory.Messagesno longer exist. - Factory classes have been introduced on a per-provided basis.
- Factory classes can be accessed directly to construct new
IStoreobjects: For exampleAwsS3Storage.FromCredentialsrather thanStorageFactory.Blobs.AwsS3. - All API methods are
asyncand the "Async" suffix has been dropped. - All API methods have an optional
CancellationTokenrather than forcing users to provide one. - At initialization, S3-compatible stores will no longer create the bucket if the specified bucket does not exist.
WriteAsync()is renamed toSetObject()and will auto compute the object's MIME type (Content-Type) if it is not supplied.GetPresignedUrl()and its variations will auto compute the object's MIME type (Content-Type).CreateDirectory()will no longer create a "dummy file" in a cloud storage bucket.RenameAsync()is renamed toMoveObject()and will no longer perform a recursive copy and delete, instead it will efficiently move using native operations.ExistsAsync()is renamed toObjectExists()and will consistently return true/false if the file or folder exists on the bucket/server.DeleteAsync()is renamed toDeleteObject()and will consistently delete a single file or folder from the bucket/server.DeleteObjects()will consistently delete multiple files or folders from the bucket/server.GetClient()will consistently return the internal cloud SDK client for all types of cloud storage. (ReplacesNativeBlobClient)- Collections returned by APIs will always be
Listinstead ofIReadOnlyCollection. - Exceptions are moved into the
FluentStorage.Exceptionsnamespace - Enums are moved into the
FluentStorage.Enumsnamespace - Bucket stores now support streaming/seeking, presigned URL and more object manipulation API
- We no longer support Databricks, ServiceFabric, EventHub, Virtual storage and ZIP archives
- FluentStorage.AWS
- Breaking changes to entire API surface to improve productivity and ease of use.
- New API:
GetClient,MoveObject,DownloadObject,UploadObject,OpenRead,OpenWrite,GetUploadUrl,GetDownloadUrl,GetPresignedUrl,GetObjectSas,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.GCP
- Breaking changes to entire API surface to improve productivity and ease of use.
- New API:
GetPresignedUrl,GetObjectSas,MoveObject,DeleteDirectory,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.Azure.Blobs
- Breaking changes to entire API surface to improve productivity and ease of use.
- New API:
GetClient,MoveObject,DownloadObject,UploadObject,OpenRead,OpenWrite,GetUploadUrl,GetDownloadUrl,GetPresignedUrl,GetObjectSas,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.Azure.Files
- Breaking changes to entire API surface to improve productivity and ease of use.
- New API:
GetClient,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.Azure.ServiceBus
- Breaking changes to entire API surface to improve productivity and ease of use.
- FluentStorage.Azure.KeyVault
- Breaking changes to entire API surface to improve productivity and ease of use.
- FluentStorage.Azure.Queues
- Breaking changes to entire API surface to improve productivity and ease of use.
- FluentStorage.FTP
- Breaking changes to entire API surface to improve productivity and ease of use.
- FTP has new directory and server API for file systems
- New API:
GetServer,CreateDirectory,DeleteDirectory,DirectoryExists,MoveDirectory,GetFilePermissions,SetFilePermissions,MoveObject,DownloadObject,UploadObject,GetBytes,SetBytes,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.SFTP
- Breaking changes to entire API surface to improve productivity and ease of use.
- SFTP has new directory and server API for file systems
- New API:
GetServer,CreateDirectory,DeleteDirectory,DirectoryExists,MoveDirectory,GetFilePermissions,SetFilePermissions,MoveObject,DownloadObject,UploadObject,GetBytes,SetBytes,OpenRange,OpenSeekable,GetObjectLength.
- FluentStorage.Alibaba
- New: Alibaba OSS provider using native Aliyun SDK. Introduces the factory API
AlibabaStorageand store classAlibabaStore.
- New: Alibaba OSS provider using native Aliyun SDK. Introduces the factory API
- FluentStorage.Minio
- New: MinIO storage provider using native Minio SDK. Introduces the factory API
MinioStorageand store classMinioStore.
- New: MinIO storage provider using native Minio SDK. Introduces the factory API
| 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 is compatible. 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 is compatible. 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 is compatible. 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 was computed. 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 is compatible. |
| .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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- FluentFTP (>= 54.2.0)
- FluentStorage (>= 8.0.11)
- Polly (>= 8.4.0)
-
.NETStandard 2.1
- FluentFTP (>= 54.2.0)
- FluentStorage (>= 8.0.11)
- Polly (>= 8.4.0)
-
net7.0
- FluentFTP (>= 54.2.0)
- FluentStorage (>= 8.0.11)
- Polly (>= 8.4.0)
-
net8.0
- FluentFTP (>= 54.2.0)
- FluentStorage (>= 8.0.11)
- Polly (>= 8.4.0)
-
net9.0
- FluentFTP (>= 54.2.0)
- FluentStorage (>= 8.0.11)
- Polly (>= 8.4.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on FluentStorage.FTP:
| Package | Downloads |
|---|---|
|
nc-storage
Package Description |
|
|
MasLazu.AspNet.Storage
A unified ASP.NET Core storage abstraction library supporting multiple cloud providers including AWS S3, Azure Blob Storage, Google Cloud Storage, and more. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 8.0.11 | 30 | 7/21/2026 |
| 8.0.10 | 87 | 7/20/2026 |
| 8.0.9 | 85 | 7/19/2026 |
| 8.0.7 | 90 | 7/18/2026 |
| 8.0.6 | 101 | 7/17/2026 |
| 8.0.5 | 88 | 7/17/2026 |
| 8.0.4 | 101 | 7/16/2026 |
| 8.0.3 | 86 | 7/16/2026 |
| 8.0.2 | 86 | 7/16/2026 |
| 8.0.0 | 86 | 7/15/2026 |
| 7.1.0 | 98 | 7/6/2026 |
| 6.0.3 | 4,260 | 4/4/2026 |
| 6.0.2 | 3,583 | 1/25/2026 |
| 6.0.0 | 4,111 | 10/1/2025 |
| 5.4.0 | 35,591 | 8/17/2024 |
| 5.3.1 | 2,036 | 5/14/2024 |
| 5.3.0 | 4,968 | 2/3/2024 |
| 5.2.1 | 6,105 | 6/8/2023 |
| 5.0.0 | 2,609 | 1/18/2023 |