FluentStorage.FTP 8.0.11

Prefix Reserved
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" />
                    
Directory.Packages.props
<PackageReference Include="FluentStorage.FTP" />
                    
Project file
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
                    
#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
                    
Install as a Cake Addin
#tool nuget:?package=FluentStorage.FTP&version=8.0.11
                    
Install as a Cake Tool

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 DownloadDirectory and UploadDirectory for 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: DownloadObject ensures parent directory exists and fix existance check
    • Fix: DownloadDirectory reports progress on successful transfers too
    • Fix: UploadDirectory reports progress on successful transfers too
    • Paths: StoreObject: Make FullPath instant by computing it at time of construction rather than dynamically
    • Paths: StoreObject: Add Input property to read the raw path given by the provider
  • FluentStorage.FTP
    • Fix: Improve DownloadObject API to have consistant behaviour
  • FluentStorage.SFTP
    • Fix: Improve DownloadObject API to have consistant behaviour
  • FluentStorage.Alibaba
    • Fix: All API should use a single constructor for StoreObject
  • FluentStorage.Tests
    • New: Extensive unit test suite for rule engine under RuleTests
FluentStorage 8.0.10
  • FluentStorage
    • Fix: CreateDirectory will not throw exceptions by default, allowing it to be called on cloud stores
    • Fix: DeleteDirectory has a default implementation for all cloud stores, to delete all objects in a virtual folder
    • Change: DiskStore: DeleteObject will no longer delete objects in a virtual directory
    • Change: MemoryStore: DeleteObject will no longer delete objects in a virtual directory
    • Fix: MemoryStore: ObjectExists normalizes the input path
    • New: MemoryStore: Implement all missing API: OpenRange, OpenWrite, IsSeekable, GetObjectLength, CreateDirectory, DirectoryExists, DeleteDirectory, MoveDirectory, MoveObject
  • FluentStorage.AWS
    • New: Implement fast DirectoryExists virtual directory check by using a ListObjectsV2 query with MaxKeys set
    • Fix: Fix access modifiers for DigitalOceanSpacesStorage factory API
    • Fix: All API now calls StoragePath.Normalize to support the unified path system
    • Change: DeleteObject will no longer delete objects in a virtual directory
  • FluentStorage.Azure.Blobs
    • New: Implement fast DirectoryExists virtual directory check by using a GetBlobsAsync query
  • FluentStorage.Azure.Files
    • Change: DeleteObject will no longer delete objects in a virtual directory
  • FluentStorage.GCP
    • New: Implement fast DirectoryExists virtual directory check by using a ExecuteAsync query with PageSize set
    • Fix: All API now calls StoragePath.Normalize to support the unified path system
    • Fix: OpenRange will not throw when the object is missing (consistant with other API)
    • Change: DeleteObject will no longer delete objects in a virtual directory
  • FluentStorage.FTP
    • Fix: All API now calls StoragePath.Normalize to support the unified path system
    • Change: DeleteObject will no longer delete objects in a virtual directory
  • FluentStorage.SFTP
    • Fix: DeleteDirectory no longer normalizes paths multiple times
  • FluentStorage.Alibaba
    • New: Implement fast DirectoryExists virtual directory check by using a ListObjects query with MaxKeys set
  • FluentStorage.Minio
    • New: Implement fast DirectoryExists virtual directory check by using a ListObjectsArgs query
    • Fix: OpenRead: Opening non-existant objects will no longer throw exceptions
    • Fix: OpenRange: Opening non-existant objects will no longer throw exceptions
    • Fix: OpenWrite will return null if the object already exists, instead of throwing exceptions
    • Fix: Consistantly catch object not found exceptions using ObjectNotFoundException
  • FluentStorage.Mongo
    • New: Implement fast DirectoryExists virtual 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: OpenWrite will return null if the object already exists, instead of throwing exceptions
    • Fix: Credential connection uses SCRAM-SHA-256 by default
  • 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.template with new provider-specific settings
FluentStorage 8.0.9
  • FluentStorage
    • Fix: UploadDirectory is more efficient for filesystem-based storage providers
  • FluentStorage.Tests
    • Add support for loading test config from YAML file fluentstorage.yaml
    • Add fluentstorage.yaml.template based 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 LogMagic and Config.Net packages, and add YamlDotNet
    • Split IStoreTest into 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
  • 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: SetBytes now correctly uploads zero-byte file data
  • FluentStorage.SFTP
    • Fix: All API now uses Async API of SftpClient rather than the old sync API
    • Fix: DownloadObject and UploadObject had invalid file existance checks
    • Fix: DownloadObject now correctly downloads file data (fix stream disposing issue)
    • Fix: SetBytes and UploadObject will automatically create the directory structure as required
    • Fix: SetBytes now correctly uploads zero-byte file data
    • Fix: CreateDirectory: No error is thrown if the folder already exists
    • Fix: GetObjectInfo and GetObjectsInfo correctly computes SFTP remote paths
    • Fix: MaxResults and BrowseFilter filtering is more efficient during directory listing
    • Fix: ListDirectory and ListObjects will return a blank list if nothing is found instead of throwing an error
    • Fix: ListDirectory and ListObjects will correctly enumerate files inside subdirectories
  • FluentStorage.Azure.Queues
    • Remove all usage of Newtonsoft.Json
    • Cleanup JSON conversion and move all static utilities into FluentStorage.Azure.Queues.Utils NS
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 DownloadDirectory and UploadDirectory, with default implementation for all stores
    • Paths: Added StoragePath.GetRelativeDiskPath and StoragePath.GetRelativeCloudPath to compute relative paths
  • FluentStorage.FTP
    • Transfer: Special handling using native FluentFTP APIs for DownloadDirectory and UploadDirectory
FluentStorage 8.0.6
  • FluentStorage
    • Paths: A new unified path system has been introduced across all providers!
    • Paths: StoragePath.Normalize has been completely rewritten to enable the unified path system
    • Paths: StoragePath.Combine, .Split and .GetParent are completely rewritten for performance
    • Paths: StoragePath.ComparePath, .RemoveRootFolder, .GetRootFolder and .Rename have been removed
    • DiskStore: GetObjects will now return all objects in the main directory recursively by default
    • Move all sinks into FluentStorage.Sinks NS
    • Move DelegatedStream and NonCloseableStream into FluentStorage.Storage.Sinks NS
    • Rename SinkedBlobStorage to SinkedStore
    • Remove RandomGenerator and move it into testing project
  • FluentStorage.SFTP
    • Paths: New SFTP path normalization system that works with updated StoragePath normalization
  • FluentStorage.GCP
    • Paths: All APIs updated to use the new StoragePath normalization to support unified paths
  • FluentStorage.Minio
    • Paths: All APIs updated to use the new StoragePath normalization to support unified paths
  • FluentStorage.Mongo
    • Paths: All APIs updated to use the new StoragePath normalization to support unified paths
  • FluentStorage.Alibaba
    • Paths: All APIs updated to use the new StoragePath normalization to support unified paths
  • 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 SeekableStream used in seeking/streaming
    • New tests for IStore operations 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, IsSeekable to async to align with other feature check APIs
    • IStore: Add IsVersioned, IsTagged and IsTiered to check if providers support new features
    • Assertions: Remove AssertFullPath and 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
  • 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
  • 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
  • FluentStorage.Minio
    • Add tagging APIs: IsTagged, GetObjectTags, SetObjectTags, DeleteObjectTags
    • Add storage tier APIs: IsTiered, GetObjectTier, SetObjectTier
FluentStorage 8.0.4
  • FluentStorage
    • Disk: Fix ListObjects and add GetServer & MoveObject APIs
    • Streams: Add NonSeekableStream to the core package
    • Rename core classes: StoreObject, MemoryMessenger, DiskStore, MemoryStore
    • Move factory classes from FluentStorage.AWS.Factory, FluentStorage.Alibaba.Factory and FluentStorage.Minio.Factory to root NS
  • FluentStorage.Mongo
    • New: MongoDB GridFS storage provider using native MongoDB driver. Introduces the factory API MongoGridStorage and store class MongoGridStore.
FluentStorage 8.0.3
  • Add APIs to all providers: GetObjectLength and 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.Blobs and StorageFactory.Messages no longer exist.
    • Factory classes have been introduced on a per-provided basis.
    • Factory classes can be accessed directly to construct new IStore objects: For example AwsS3Storage.FromCredentials rather than StorageFactory.Blobs.AwsS3.
    • All API methods are async and the "Async" suffix has been dropped.
    • All API methods have an optional CancellationToken rather 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 to SetObject() 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 to MoveObject() and will no longer perform a recursive copy and delete, instead it will efficiently move using native operations.
    • ExistsAsync() is renamed to ObjectExists() and will consistently return true/false if the file or folder exists on the bucket/server.
    • DeleteAsync() is renamed to DeleteObject() 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. (Replaces NativeBlobClient)
    • Collections returned by APIs will always be List instead of IReadOnlyCollection.
    • Exceptions are moved into the FluentStorage.Exceptions namespace
    • Enums are moved into the FluentStorage.Enums namespace
    • 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
  • FluentStorage.Azure.KeyVault
  • FluentStorage.Azure.Queues
  • 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 AlibabaStorage and store class AlibabaStore.
  • FluentStorage.Minio
    • New: MinIO storage provider using native Minio SDK. Introduces the factory API MinioStorage and store class MinioStore.
Product 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.

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