- FluentStorage.FTP
- Fixed logic in
Disposemethod that prevented the FTP client from being disposed - Update FluentFTP to 53.0.2
- Fixed logic in
- FluentStorage.AWS
- Added null check for
CommonPrefixesin theToBlobsmethod - Handle case where no S3 Objects exists in the response
- Added null check for
- FluentStorage.Azure.Blobs
- Added multi-region support for Azure Blob and DataLake
- FluentStorage.AWS
- Fix: Null Exception at
ListAsync
- Fix: Null Exception at
- FluentStorage
- Allow setting text content when writing dummy files
- Update
TestableIOpackages due to binary incompatibility - Respect
createIfNotExistsinGetFilePathand prevent unintended directory creation
- FluentStorage.Azure.Blobs
- Allow passing
BlobClientOptions - Update
OpenReadAsyncto useOpenReadAsyncfrom Azure SDK OpenReadAsyncfor efficient streaming overDownloadAsync- Minimise platform dependencies
- Update
Azure.IdentityNuget package to latest versions
- Allow passing
- FluentStorage.Azure.DataLake.Store
- Update
MicrosoftNuget package to latest versions
- Update
- FluentStorage.AWS
- Allow passing the Protocol property to the
PresignedRequest - Use
ContentTypewhen setting AWS Metadata - Handle response with null S3 objects
- Update AWS Nuget packages from v3.7 to v4.0
- Allow passing the Protocol property to the
- FluentStorage.Tests
- Upgrade projects from NET 6 to NET 9
- FluentStorage.FTP
- Upgrade FluentFTP to the latest version 53.0.1
- FluentStorage.SFTP
- Upgrade SSH.NET to the latest version 2025.0.0
- All projects
- Reduce .NET platform Nuget dependencies
- Drop support for
net50,net60 - Add support for
net70,net80,net90 - Cleanup folder structure and add a common
buildfolder for all projects
- Fix: Update to latest
Microsoft.IO.RecyclableMemoryStreampackage (thanks @dammitjanet) - New: Use
IFileSystempackage to improve testability ofDiskDirectoryBlobStorage(thanks @gerrewsb)
- New:
OpenWriteAsyncAPI to append to existing blobs (thanks @gentledepp) - Fix: Update to latest Azure packages (thanks @dammitjanet)
- Change: Swap from
MemoryStreamtoRecyclableMemoryStream(thanks @dammitjanet)
- New: Return additional headers in
GetObjectMetadataAsyncAPI for access toContent-Type(thanks @pkdigital)
- Fix: Paths prefixed with
\will be correctly handled inZipFileBlobStorage(thanks @gerrewsb) - New: Adds new connection string prefix
minio.s3to allow MinIO connections to be created using a connection string (thanks @NickHarmer) - Change: Default value of
ListOptions.RecursionModefromLocaltoRemote, so that S3/MinIO connections will recurse remotely by default - New: Add support for
ListOptions.PageSizewhich allows users to customize the number of objects returned per call - New: Added reflection utilities that can be used by other FluentStorage modules
- Fix:
ExtendedSdk.GetHttpPipelineneeds to be manually set otherwise connection to DataLake Gen2 fails
- New:
BucketNameAPI inAwsS3BlobStorageto obtain the bucket name (thanks @Pchol) - New:
SetAclAPI inAwsS3BlobStorageto set S3 object permissions (thanks @Pchol) - New: Adds support for connection string prefix
minio.s3(thanks @NickHarmer) - New: Add support for
ListOptions.PageSizewhich allows users to customize the number of objects returned per call - New: Add support for
ListOptions.NumberOfRecursionThreadsto configure the number of threads
- New: Add support for
ListOptions.PageSizewhich allows users to customize the number of objects returned per call
- New: Add support for
ListOptions.NumberOfRecursionThreadsto configure the number of threads
- Fix: Add missing dependency to
PollyNuget package
- Fix: Incorrect extension method
MinIOin AWS Storage Factory
- Support for DigitalOceanSpaces, MinIO, Wasabi
- New:
StorageFactory.Blobs.DigitalOceanSpacesAPI for connecting to DigitalOcean Spaces - New:
StorageFactory.Blobs.MinIOAPI for connecting to MinIO storage servers - New:
StorageFactory.Blobs.WasabiAPI for connecting to Wasabi storage - New: Adds support for
serviceUrlparameter in theAws.S3connection string - New: Check to ensure
regionandserviceUrlare not specified together
- Fix:
DeleteAsyncwill delete all files in bucket if target object is not found - GCP packages have been updated to their latest versions
The following packages have had their dependencies updated. No other changes were done.
- FluentStorage.Azure.Blobs 5.2.3
- FluentStorage.Azure.DataLake 5.2.2
- FluentStorage.Azure.EventHub 5.2.2
- FluentStorage.Azure.Files 5.2.2
- FluentStorage.Azure.KeyVault 5.2.2
- FluentStorage.Azure.Queues 5.2.2
- FluentStorage.Azure.ServiceBus 6.0.1
- FluentStorage.Azure.ServiceFabric 5.2.2
- FluentStorage.Databricks 5.2.2
- FluentStorage.FTP 5.3.1
- FluentStorage.SFTP 5.3.1
(thanks timbze)
- Fix: Disk blob storage
WriteAsyncusesCopyToAsyncrather than sync
(thanks beeradmoore)
- New:
ListAsyncnow supports recursion for listing directories usingFtpListOption.Recursive
(thanks beeradmoore)
- New:
ListAsyncnow supports recursion for listing directories using manual async recursion - Fix:
WriteAsyncnow sets the length of destination stream manually to avoid resulting data being left
(thanks GiampaoloGabba)
- Fix: Completely rewrite package for the new SDK
Azure.Messaging.ServiceBus - New: New API for construction
AzureServiceBusTopicReceiverandAzureServiceBusQueueReceiver - New:
IMessengerinterface uses structured string format for referencing queues/topics - New:
IAzureServiceBusMessengerinterface with API to send/create/delete/count a queue/topic/subscription
- Fix: Remove unused dependency package
Newtonsoft.Jsonfrom main project
(thanks dammitjanet)
- New: Constructor for
SymmetricEncryptionSinkandAesSymmetricEncryptionSinkto pass IV and key - New: Constructor for
EncryptedSinkabstract base class to pass in IV and key - New: Additional tests for encryption/decryption repeatability when the decrpytion IV is known
- Fix: Resolved Xunit errors and issue with with Xunit
FileDataattribute only finding a single file per test - Fix: Package updates and consolidation to latest Xunit
(thanks dammitjanet)
- New: Addition of
AesSymmetricEncryptionSinkandWithAesSymmetricEncryptionextension - Fix: Obsolesence of
SymmetricEncryptionSinkandWithSymmetricEncryptionextension - New: Updated Tests for
AesSymmetricEncryptionSink - New: Additional Blob/Stream file tests and XUnit
FileDataAttributeto support tests
- Fix:
AwsS3BlobStoragechecks if a bucket exists before trying to create one (thanks AntMaster7)
- Fix: Upgrade
System.Text.Jsonpackage from v4 to v7
- Fix: Upgrade
System.Text.Jsonpackage from v4 to v7 - Fix: Local storage: Handling of
LastModificationTimeandCreatedTime - Fix: Local storage:
LastAccessTimeUtcis saved as a Universal sortable string in the Blob properties
- Fix: Various fixes to
ListAsyncpath handling - Fix: Upgrade
SSH.NETpackage from v2016 to v2020
- New: Added support for a root path in the SFTP connection string
- Fix:
GetBlobsAsyncshould return an array with a single null if the file does not exist - Fix:
WriteAsyncwill create the directory if it does not exist
- New: Implement
LocalDiskMessenger.StartProcessorAsync - Package: Add Nuget reference to
Newtonsoft.Json 13.0.3 - Package: Remove Nuget reference to
Newtonsoft.Json 12.x.x - Package: Remove Nuget reference to
NetBoxand add the required utilities within this library
- New: Implement server-side filtering in
AwsS3DirectoryBrowser.ListAsyncby supplying aFilePrefix(thanks SRJames)
- Fix: Support for the append parameter in FluentFtpBlobStorage (thanks candoumbe)
- Fix:
IBlobStorage.WriteAsyncwill create the directory hierarchy if required (thanks candoumbe)
- Fix: Implementation of
LocalDiskMessenger.StartProcessorAsync(issue #14)(netstandard2.1/net6.0and above
- New: Introducing the FluentStorage set of libraries created from Storage.NET
- New: Added SFTP provider using SSH.NET
- Fix: FTP provider FluentFTP updated to v44
- Fix: AWS Nugets bumped to latest versions as of Jan 2023
- Fix: All nuget packages now target
netstandard2.0,netstandard2.1,net50,net60 - Change: Refactored package structure to simplify naming scheme
- Change: Refactored entire codebase to simplify code organization
- New: Documentation wiki created with one page per provider