feat: use local blob storage
This commit is contained in:
@@ -2,7 +2,10 @@ using Azure.Identity;
|
||||
using FastEndpoints;
|
||||
using FastEndpoints.Swagger;
|
||||
using Microsoft.AspNetCore.HttpOverrides;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Socialize;
|
||||
using Socialize.Api.Infrastructure.BlobStorage.Configuration;
|
||||
using Socialize.Api.Infrastructure.BlobStorage.Services;
|
||||
using Socialize.Api.Infrastructure;
|
||||
using Socialize.Api.Infrastructure.Development;
|
||||
using Socialize.Api.Modules.Approvals;
|
||||
@@ -92,6 +95,38 @@ if (!app.Environment.IsDevelopment())
|
||||
|
||||
app.UseHealthChecks("/health");
|
||||
|
||||
LocalBlobStorageOptions localBlobStorageOptions = app.Services
|
||||
.GetRequiredService<IOptions<LocalBlobStorageOptions>>()
|
||||
.Value;
|
||||
|
||||
string localBlobStorageRoot = app.Services
|
||||
.GetRequiredService<LocalBlobStorage>()
|
||||
.GetRootPath();
|
||||
string localBlobStorageRootWithSeparator = Path.EndsInDirectorySeparator(localBlobStorageRoot)
|
||||
? localBlobStorageRoot
|
||||
: $"{localBlobStorageRoot}{Path.DirectorySeparatorChar}";
|
||||
|
||||
Directory.CreateDirectory(localBlobStorageRoot);
|
||||
|
||||
app.MapGet(
|
||||
$"{LocalBlobStorage.NormalizeRequestPath(localBlobStorageOptions.RequestPath)}/{{**blobPath}}",
|
||||
async (
|
||||
string blobPath,
|
||||
CancellationToken ct) =>
|
||||
{
|
||||
string filePath = Path.GetFullPath(Path.Combine(localBlobStorageRoot, blobPath));
|
||||
if (!filePath.StartsWith(localBlobStorageRootWithSeparator, StringComparison.Ordinal) ||
|
||||
filePath.EndsWith(".content-type", StringComparison.OrdinalIgnoreCase) ||
|
||||
!File.Exists(filePath))
|
||||
{
|
||||
return Results.NotFound();
|
||||
}
|
||||
|
||||
string contentType = LocalBlobStorage.ReadContentType(filePath) ?? "application/octet-stream";
|
||||
byte[] bytes = await File.ReadAllBytesAsync(filePath, ct);
|
||||
return Results.File(bytes, contentType);
|
||||
});
|
||||
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
Reference in New Issue
Block a user