Soenneker.Blob.Upload
11.0.3321
Prefix Reserved
dotnet add package Soenneker.Blob.Upload --version 11.0.3321
NuGet\Install-Package Soenneker.Blob.Upload -Version 11.0.3321
<PackageReference Include="Soenneker.Blob.Upload" Version="11.0.3321" />
<PackageVersion Include="Soenneker.Blob.Upload" Version="11.0.3321" />
<PackageReference Include="Soenneker.Blob.Upload" />
paket add Soenneker.Blob.Upload --version 11.0.3321
#r "nuget: Soenneker.Blob.Upload, 11.0.3321"
#:package Soenneker.Blob.Upload@11.0.3321
#addin nuget:?package=Soenneker.Blob.Upload&version=11.0.3321
#tool nuget:?package=Soenneker.Blob.Upload&version=11.0.3321
Soenneker.Blob.Upload
Uploads files, streams, bytes, and text to Azure block blobs.
Installation
dotnet add package Soenneker.Blob.Upload
Configuration
{
"Environment": "Production",
"Azure": {
"Storage": {
"Blob": {
"ConnectionString": "<connection string>",
"AccountName": "<storage account name>",
"AccountKey": "<storage account key>"
}
}
}
}
The connection string is used for uploads. The account name, account key, and environment are required by the registered SAS utility and by UploadAndGetSasUri.
Registration
using Microsoft.Extensions.DependencyInjection;
using Soenneker.Blob.Upload.Registrars;
services.AddBlobUploadUtilAsSingleton();
AddBlobUploadUtilAsScoped() is also available.
Upload text or bytes
using Soenneker.Blob.Upload.Abstract;
public sealed class ManifestStore
{
private readonly IBlobUploadUtil _uploads;
public ManifestStore(IBlobUploadUtil uploads)
{
_uploads = uploads;
}
public async ValueTask Save(
string json,
CancellationToken cancellationToken)
{
_ = await _uploads.Upload(
"assets",
"manifests/latest.json",
json,
contentType: "application/json",
cancellationToken: cancellationToken);
}
}
Upload a file or stream
Use the file and stream overloads to avoid first copying large content into a byte array:
_ = await uploads.UploadFromFile(
"exports",
"daily/archive.zip",
absolutePath,
contentType: "application/zip",
cancellationToken: cancellationToken);
await using FileStream input = File.OpenRead(absolutePath);
_ = await uploads.Upload(
"exports",
"daily/archive.zip",
input,
contentType: "application/zip",
cancellationToken: cancellationToken);
The stream overload begins at the stream's current position and does not dispose or rewind it.
Upload and create a read URL
string sasUri = await uploads.UploadAndGetSasUri(
"private-assets",
"previews/report.pdf",
pdfBytes,
contentType: "application/pdf",
cancellationToken: cancellationToken);
The returned URL is read-only and expires after one month. Treat it as a credential: do not log it or expose it to callers that should not read the blob.
Behavior
- Every upload overwrites an existing block blob at the same container and path. This API does not expose conditional create or ETag protection.
- Supplying
contentTypestores it in the blob's HTTP headers. The library does not infer a MIME type from a filename. - Byte-array and string overloads buffer content in a temporary memory stream. Prefer file or stream uploads for large or untrusted payloads.
- The caller owns streams passed to
Upload; the library-owned streams used by byte and string overloads are disposed automatically. - The underlying client utility creates a missing container.
publicAccessTypeapplies only during that creation and does not change an existing container's access level. - Azure service failures are thrown as
RequestFailedException; cancellation is passed through to client creation and upload.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Soenneker.Blob.Sas (>= 11.0.3127)
- Soenneker.Utils.MemoryStream (>= 11.0.1603)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Soenneker.Blob.Upload:
| Package | Downloads |
|---|---|
|
Soenneker.Blob.Suite
A concoction of Azure Blob Storage utilities and libraries |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.3321 | 0 | 10/26/2026 |
| 11.0.3320 | 0 | 10/26/2026 |
| 11.0.3319 | 0 | 10/26/2026 |
| 11.0.3318 | 0 | 10/26/2026 |
| 4.0.3317 | 306 | 10/15/2026 |
| 4.0.3316 | 138 | 10/15/2026 |
| 4.0.3315 | 102 | 10/15/2026 |
| 4.0.3314 | 92 | 10/15/2026 |
| 4.0.3313 | 95 | 10/15/2026 |
| 4.0.3312 | 149 | 10/14/2026 |
| 4.0.3309 | 104 | 10/14/2026 |
| 4.0.3308 | 104 | 10/14/2026 |
| 4.0.3307 | 91 | 10/14/2026 |
| 4.0.3306 | 89 | 10/14/2026 |
| 4.0.3299 | 172 | 10/12/2026 |
| 4.0.3297 | 110 | 10/12/2026 |
| 4.0.3296 | 120 | 10/12/2026 |
| 4.0.3295 | 139 | 10/12/2026 |
| 4.0.3294 | 95 | 10/12/2026 |
| 4.0.3293 | 112 | 10/11/2026 |
Update dependency Soenneker.Utils.MemoryStream to 11.0.1603 (#4323)