DMS Layout mit Fehlern
All checks were successful
Build & Deploy PLDpro.Web Test to 192.168.1.100 / build-and-deploy (push) Successful in 1m15s
All checks were successful
Build & Deploy PLDpro.Web Test to 192.168.1.100 / build-and-deploy (push) Successful in 1m15s
This commit is contained in:
94
Components/Pages/DmsUpload.razor
Normal file
94
Components/Pages/DmsUpload.razor
Normal file
@@ -0,0 +1,94 @@
|
||||
@page "/dms/upload"
|
||||
@using MudBlazor
|
||||
@inject Pldpro.Web.UI.Services.IDocumentClient Client
|
||||
@inject NavigationManager Nav
|
||||
@inject ISnackbar Snackbar
|
||||
|
||||
<PageTitle>Upload</PageTitle>
|
||||
|
||||
<MudPaper Class="pa-4">
|
||||
<MudText Typo="Typo.h5" GutterBottom="true">Dokument-Upload</MudText>
|
||||
|
||||
<MudStack Spacing="2">
|
||||
<MudSelect T="string" @bind-Value="_bucket" Label="Bucket" Dense="true" Style="min-width:260px" Required="true" RequiredError="Bitte Bucket wählen">
|
||||
@foreach (var b in _buckets)
|
||||
{
|
||||
<MudSelectItem Value="@b">@b</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudTextField @bind-Value="_path"
|
||||
Placeholder="Pfad (optional, z. B. rechnungen/2026)"
|
||||
Variant="Variant.Outlined"
|
||||
Adornment="Adornment.Start"
|
||||
AdornmentIcon="@Icons.Material.Filled.Folder" />
|
||||
|
||||
<InputFile OnChange="OnFilesSelected" multiple />
|
||||
|
||||
|
||||
<MudList T="string" Dense="true">
|
||||
@foreach (var msg in _messages)
|
||||
{
|
||||
<MudListItem>@msg</MudListItem>
|
||||
}
|
||||
</MudList>
|
||||
|
||||
|
||||
<MudStack Row="true" Spacing="2">
|
||||
<MudButton Variant="Variant.Outlined" StartIcon="@Icons.Material.Filled.List" OnClick="@(() => Nav.NavigateTo("/dms/list"))">
|
||||
Zur Liste
|
||||
</MudButton>
|
||||
<MudButton Variant="Variant.Outlined" StartIcon="@Icons.Material.Filled.Dashboard" OnClick="@(() => Nav.NavigateTo("/dms"))">
|
||||
Dashboard
|
||||
</MudButton>
|
||||
</MudStack>
|
||||
</MudStack>
|
||||
</MudPaper>
|
||||
|
||||
@code {
|
||||
private List<string> _buckets = new();
|
||||
private string? _bucket;
|
||||
private string? _path;
|
||||
|
||||
private RenderFragment? _result;
|
||||
private const long StreamLimit = 512L * 1024 * 1024;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
_buckets = (await Client.ListBucketsAsync()).ToList();
|
||||
_bucket = _buckets.FirstOrDefault();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"Buckets konnten nicht geladen werden: {ex.Message}", Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private readonly List<string> _messages = new();
|
||||
|
||||
private async Task OnFilesSelected(InputFileChangeEventArgs e)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(_bucket))
|
||||
{
|
||||
Snackbar.Add("Bitte zuerst einen Bucket auswählen.", Severity.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var f in e.GetMultipleFiles())
|
||||
{
|
||||
try
|
||||
{
|
||||
await Client.UploadAsync(_bucket!, _path, f, StreamLimit);
|
||||
_messages.Add($"hochgeladen: {f.Name} ({f.Size:N0} Bytes)");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_messages.Add($"Fehler bei '{f.Name}': {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user