Guler.Editor.Storage.S3
0.2.0-alpha.0
dotnet add package Guler.Editor.Storage.S3 --version 0.2.0-alpha.0
NuGet\Install-Package Guler.Editor.Storage.S3 -Version 0.2.0-alpha.0
<PackageReference Include="Guler.Editor.Storage.S3" Version="0.2.0-alpha.0" />
<PackageVersion Include="Guler.Editor.Storage.S3" Version="0.2.0-alpha.0" />
<PackageReference Include="Guler.Editor.Storage.S3" />
paket add Guler.Editor.Storage.S3 --version 0.2.0-alpha.0
#r "nuget: Guler.Editor.Storage.S3, 0.2.0-alpha.0"
#:package Guler.Editor.Storage.S3@0.2.0-alpha.0
#addin nuget:?package=Guler.Editor.Storage.S3&version=0.2.0-alpha.0&prerelease
#tool nuget:?package=Guler.Editor.Storage.S3&version=0.2.0-alpha.0&prerelease
Stylus.Storage.S3
Stylus için Amazon S3 (ve S3-uyumlu — MinIO, Backblaze B2, DigitalOcean Spaces, Wasabi) tabanlı
IStylusFileStorageadapter'ı.
Stylus.Core abstraction'ı üstüne inşa edilmiştir. Default LocalDiskFileStorage yerine bulut storage kullanmak için DI'da register edilir.
Hızlı başlangıç
dotnet add package Stylus.Storage.S3
// Program.cs
using Stylus.Core.FileManager;
using Stylus.Storage.S3;
builder.Services.AddStylus(); // Default LocalDiskFileStorage register edilir
// IStylusFileStorage'i S3 ile override et
builder.Services.AddSingleton<IStylusFileStorage>(sp =>
new S3FileStorage(new S3FileStorageOptions
{
BucketName = "my-stylus-uploads",
Region = "eu-central-1",
KeyPrefix = "stylus/",
// Credentials: env / IAM role / explicit
}));
TenantScopedFileStorage decorator otomatik sarmalanmaz — istersen manuel:
builder.Services.AddSingleton<S3FileStorage>(sp =>
new S3FileStorage(new S3FileStorageOptions { ... }));
builder.Services.AddScoped<IStylusFileStorage>(sp =>
{
var inner = sp.GetRequiredService<S3FileStorage>();
var auth = sp.GetRequiredService<IStylusAuthorizationContext>();
return new TenantScopedFileStorage(inner, auth);
});
S3-uyumlu provider örnekleri
MinIO (self-hosted)
new S3FileStorageOptions
{
BucketName = "stylus",
Region = "us-east-1", // placeholder, MinIO ignore eder
ServiceUrl = "http://localhost:9000",
ForcePathStyle = true,
AccessKey = "minioadmin",
SecretKey = "minioadmin",
}
Backblaze B2
new S3FileStorageOptions
{
BucketName = "my-bucket",
Region = "us-west-002",
ServiceUrl = "https://s3.us-west-002.backblazeb2.com",
ForcePathStyle = true,
AccessKey = "<keyId>",
SecretKey = "<applicationKey>",
}
DigitalOcean Spaces
new S3FileStorageOptions
{
BucketName = "my-space",
Region = "fra1",
ServiceUrl = "https://fra1.digitaloceanspaces.com",
ForcePathStyle = false,
AccessKey = "<key>",
SecretKey = "<secret>",
}
Konfig opsiyonları
| Property | Default | Açıklama |
|---|---|---|
BucketName |
(zorunlu) | S3 bucket adı |
KeyPrefix |
"" |
Tüm Stylus dosyaları bu prefix altında saklanır ("stylus/" gibi) |
Region |
"eu-central-1" |
AWS region; S3-uyumlu için placeholder |
ServiceUrl |
null |
S3-uyumlu endpoint URL'i; null = AWS resmi S3 |
ForcePathStyle |
false |
MinIO/B2 için true; AWS için false |
AccessKey / SecretKey |
null |
Explicit credentials; null = AWS SDK default chain |
TimeoutMs |
30000 |
HTTP request timeout |
Mimari
S3'te native "klasör" kavramı yoktur — Stylus klasör semantiği delimiter='/' ile prefix grouping üzerinden simüle edilir:
- List:
ListObjectsV2(prefix='folder/', delimiter='/')→ CommonPrefixes (klasörler) + S3Objects (dosyalar) - CreateDirectory: No-op (S3 explicit klasör desteklemez); upload sırasında otomatik
- Move: Native rename yok; CopyObject + DeleteObject
- Delete recursive: Prefix altındaki tüm key'leri DeleteObjects (batch)
Bağımlılıklar
Stylus.Core(≥ 0.1.0-alpha.0)AWSSDK.S3(≥ 3.7.405)
Lisans
MIT — Stylus open core taahhüdü (decisions/ADR-003).
Faz 3 alpha durumu
Bu paket Faz 3 alpha sürümündedir. Pilot deployment'larda S3-uyumlu provider'lar (özellikle Türkiye'de yaygın self-hosted MinIO) doğrulanacak.
| 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 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 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
- AWSSDK.S3 (>= 3.7.405.7)
- Guler.Editor.Core (>= 0.2.0-alpha.0)
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.2.0-alpha.0 | 78 | 5/1/2026 |