imagefile endpunkt

This commit is contained in:
Tizian.Breuch
2025-08-06 09:41:29 +02:00
parent 69b2b4bf84
commit 2475e896b9
5 changed files with 131 additions and 1 deletions

View File

@@ -0,0 +1,47 @@
// src/Webshop.Api/Controllers/Admin/FileUploadController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;
using Webshop.Application.DTOs;
using Webshop.Domain.Interfaces;
namespace Webshop.Api.Controllers.Admin
{
[ApiController]
[Route("api/v1/admin/files")]
[Authorize(Roles = "Admin")]
public class FileUploadController : ControllerBase
{
private readonly IFileStorageService _fileStorageService;
public FileUploadController(IFileStorageService fileStorageService)
{
_fileStorageService = fileStorageService;
}
[HttpPost("upload")]
public async Task<ActionResult<FileUploadResultDto>> UploadImage(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest(new { Message = "Es wurde keine Datei hochgeladen." });
}
// Optional: Validierung des Dateityps
if (!file.ContentType.StartsWith("image/"))
{
return BadRequest(new { Message = "Nur Bilddateien sind erlaubt." });
}
// Öffne einen Stream aus der hochgeladenen Datei
await using var stream = file.OpenReadStream();
// Speichere die Datei mit dem Service und erhalte die URL
var fileUrl = await _fileStorageService.SaveFileAsync(stream, file.FileName, file.ContentType);
return Ok(new FileUploadResultDto { Url = fileUrl });
}
}
}

View File

@@ -74,6 +74,8 @@ builder.Services.AddAuthentication(options =>
});
builder.Services.AddAuthorization();
builder.Services.AddHttpContextAccessor();
// Repositories
builder.Services.AddScoped<IProductRepository, ProductRepository>();
builder.Services.AddScoped<ISupplierRepository, SupplierRepository>();
@@ -106,6 +108,7 @@ builder.Services.AddScoped<IOrderService, OrderService>();
builder.Services.AddScoped<IAddressService, AddressService>();
builder.Services.AddScoped<ICheckoutService, CheckoutService>();
builder.Services.AddScoped<IReviewService, ReviewService>();
builder.Services.AddScoped<IFileStorageService, LocalFileStorageService>();
// Externe Dienste (Resend)
builder.Services.AddHttpClient<ResendClient>();
@@ -286,10 +289,13 @@ app.UseForwardedHeaders(new ForwardedHeadersOptions
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
// << NEU: Statische Dateien aus wwwroot bereitstellen (z.B. /uploads/xyz.jpg) >>
app.UseStaticFiles();
// Swagger/SwaggerUI f<>r API-Dokumentation aktivieren
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwagger();
app.UseSwaggerUI();
//}