Storages3 0.5.2

There is a newer version of this package available.
See the version list below for details.
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package Storages3 --version 0.5.2
NuGet\Install-Package Storages3 -Version 0.5.2
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="Storages3" Version="0.5.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Storages3 --version 0.5.2
#r "nuget: Storages3, 0.5.2"
#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.
// Install Storages3 as a Cake Addin
#addin nuget:?package=Storages3&version=0.5.2

// Install Storages3 as a Cake Tool
#tool nuget:?package=Storages3&version=0.5.2

Pipeline NuGet NuGet CodeFactor

Storage для S3

Привет! Это простейший клиент для работы с S3 хранилищами. Протестировано только на Minio, без https. Мотивация создания была простейшей - я не понимал, почему клиенты от AWS и Minio едят так много памяти. Для красоты эксперимента я добавил ещё один клиент, которы нашёл на github - клиент для Yandex Objects, который использовать строго не рекомендую.

BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1265/22H2/2022Update/SunValley2)
AMD Ryzen 7 5800H with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.102
  [Host]   : .NET 7.0.2 (7.0.222.60605), X64 RyuJIT AVX2 DEBUG
  .NET 7.0 : .NET 7.0.2 (7.0.222.60605), X64 RyuJIT AVX2

Job=.NET 7.0  Runtime=.NET 7.0 
Method Mean Ratio Gen0 Gen1 Gen2 Allocated Alloc Ratio
Aws 2.160 s 1.65 25000.0000 8000.0000 - 207325.71 KB 254.56
Minio 1.280 s 0.97 - - - 279978.45 KB 343.76
Yandex 1.539 s 1.17 1000.0000 1000.0000 1000.0000 1033076.55 KB 1,268.43
Storage 1.318 s 1.00 - - - 814.45 KB 1.00

Создание клиента

Для работы с хранилищем необходимо создать клиент.

var storageClient = new StorageClient(new StorageSettings
{
    AccessKey = "ROOTUSER",
    Bucket = "mybucket",
    EndPoint = "localhost",
    Port = 9000,
    SecretKey = "ChangeMe123",
})

Операции с S3 bucket

Создание bucket'a

Мы передаём название bucket'a в настройках, поэтому дополнительно его вводить не надо.

bool bucketCreateResult = await storageClient.CreateBucket(CancellationToken.None);
if (bucketCreateResult) Console.WriteLine("Bucket создан")

Проверка существования bucket'a

Как и в прошлый раз, мы знаем название bucket'a, так как мы передаём его в настройках клиента.

bool bucketCheckResult = await storageClient.BucketExists(CancellationToken.None);
if (bucketCheckResult) Console.WriteLine("Bucket существует")

Удаление bucket'a

bool bucketDeleteResult = await storageClient.BucketExists(CancellationToken.None);
if (bucketDeleteResult) Console.WriteLine("Bucket удалён")

Операции с S3 object

Напомню, что объект в смысле S3 это и есть файл.

Создание object'a

Создание, то есть загрузка файла в S3 хранилище, возможна двумя путями: с разбиением исходных данных на кусочки (multipart) и без этого. Самый простой способ загрузки файла, это воспользоваться сделующим методом (если файл будет больше 5 МБ, то применяется multipart):

bool fileUploadResult = await storageClient.UploadFile(fileName, fileStream, fileContentType, CancellationToken.None);
if (fileUploadResult) Console.WriteLine("Файл загружен")
Создание S3 объекта без Multipart

Можно принудительно загружать файл без multipart. Есть сигнатура и для byte[].

bool fileUploadResult = await storageClient.PutFile(fileName, byteArray, fileContentType, CancellationToken.None);
if (fileUploadResult) Console.WriteLine("Файл загружен")
Создание S3 объекта с использованием Multipart

Можно принудительно загружать файл с использованием multipart. В этом случае нужно будет явно указать размер одного кусочка (не менее 5 МБ).

bool fileUploadResult = await storageClient.PutFileMultipart(fileName, fileStream, fileContentType, partSize, CancellationToken.None);
if (fileUploadResult) Console.WriteLine("Файл загружен")

Проверка существования object'a

bool fileExistsResult = await storageClient.FileExists(fileName, CancellationToken.None);
if (fileExistsResult) Console.WriteLine("Файл существует")

Удаление object'a

Удаление объекта из S3 происходит почти мгновенно. Такое ощущение, что просто ставится задача на удаление и клиенту возвращается результат.

bool fileDeleteResult = await storageClient.DeleteFile(fileName, CancellationToken.None);
if (fileDeleteResult) Console.WriteLine("Файл удалён")

Тесты

Как запускать тесты через github actions пока не придумал. Нужна же minio, а как вставить её я не знаю. Варианты нашёл, читаю.

Product Compatible and additional computed target framework versions.
.NET 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.6.3 44 4/27/2024
0.6.0 636 3/24/2023
0.5.9 604 3/12/2023
0.5.8 605 3/9/2023
0.5.7 556 3/9/2023
0.5.6 615 3/9/2023
0.5.5 592 3/8/2023
0.5.4 561 3/7/2023
0.5.3 575 3/6/2023