diff --git a/FrontApp/Pages/SubirArchivo.razor b/FrontApp/Pages/SubirArchivo.razor
index 67fdcff..40f5ad4 100644
--- a/FrontApp/Pages/SubirArchivo.razor
+++ b/FrontApp/Pages/SubirArchivo.razor
@@ -7,41 +7,110 @@
Subir Archivo - NubeCasera
-
-
Subir Archivo
-
-@*
-
Seleccionar Archivo:
-
-
*@
-
+
+
-
+
+
+
+
+@if (archivosSeleccionados != null && archivosSeleccionados.Count > 0)
+{
+
+
Archivos Seleccionados: @archivosSeleccionados.Count
+
+ @foreach (var archivo in archivosSeleccionados)
+ {
+ - @archivo.Name (@(archivo.Size / 1024) KB)
+ }
+
+
+
+
+}
+
+@if (subiendoArchivo)
+{
+
+}
@code {
[Parameter]
public Guid? CategoriaId { get; set; }
- // este codigo, recibe 1 IFormFile por request, se enfoca en el loop
- // se puede optimizar modificando o creando un endpoint recibiendo
- // List.
- public async Task SubirArchivoMetodo(InputFileChangeEventArgs e)
+ // Variables para la barra de progreso
+ private int progresoActual = 0;
+ private bool subiendoArchivo = false;
+
+ // variable para guardar los archivos seleccionados
+ private IReadOnlyList? archivosSeleccionados;
+
+ // obtiene los archivos seleccionados y los guarda en la variable archivosSeleccionados
+ private void ArchivosSeleccionados(InputFileChangeEventArgs e)
+ {
+ archivosSeleccionados = e.GetMultipleFiles();
+ }
+
+ public async Task SubirArchivos()
{
- var archivos = e.GetMultipleFiles();
+ if (archivosSeleccionados == null || archivosSeleccionados.Count == 0)return;
const long MaxFileSize = 5L * 1024L * 1024L * 1024L;
- foreach (var archivo in archivos)
+ // Mostrar la barra de progreso
+ subiendoArchivo = true;
+ progresoActual = 0;
+
+ try
+ {
+ foreach (var archivo in archivosSeleccionados)
+ {
+ await ArchivoService.SubirArchivoAsync(
+ archivo,
+ CategoriaId ?? Guid.Empty,
+ MaxFileSize,
+ (porcentaje) =>
+ {
+ progresoActual = porcentaje;
+ StateHasChanged(); // Actualizar la UI
+ }
+ );
+ }
+ }
+ catch (Exception ex)
+ {
+ // Manejar errores (por ejemplo, mostrar un mensaje)
+ Console.WriteLine($"Error: {ex.Message}");
+ }
+ finally
{
- await using var stream = archivo.OpenReadStream(maxAllowedSize: MaxFileSize);
- // IBrowserFile file, Guid IdCategoria, long maxAllowedSize
- await ArchivoService.SubirArchivoAsync(archivo, CategoriaId ?? Guid.Empty, MaxFileSize);
+ // Ocultar la barra al terminar (éxito o error)
+ subiendoArchivo = false;
+ progresoActual = 0;
}
- Navigation.NavigateTo("/archivos");
-
}
}
\ No newline at end of file
diff --git a/FrontApp/Servicios/ArchivoService.cs b/FrontApp/Servicios/ArchivoService.cs
index bde4554..771cba2 100644
--- a/FrontApp/Servicios/ArchivoService.cs
+++ b/FrontApp/Servicios/ArchivoService.cs
@@ -10,11 +10,16 @@ namespace Front.Servicios
public class ArchivoService : IArchivoService
{
private readonly HttpClient _httpClient;
+
+ //public Action? OnProgresoActualizado;
+
public ArchivoService(HttpClient httpClient)
{
_httpClient = httpClient;
}
+
+
public async Task> ObtenerArchivosAsync(Guid? categoriaId = null)
{
var url = categoriaId.HasValue
@@ -38,8 +43,8 @@ public async Task EliminarArchivoAsync(Guid id)
response.EnsureSuccessStatusCode();
}
- #region working on!
- public async Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long maxAllowedSize)
+
+ public async Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long maxAllowedSize, Action OnProgresoActualizado)
{
const int chunkSize = 4 * 1024 * 1024; // 4 MB por chunk
var IdSubida = Guid.NewGuid().ToString();
@@ -78,6 +83,10 @@ public async Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long ma
// importante: pedir que el browser use streaming si esta disponible
req.SetBrowserRequestStreamingEnabled(true);
+ // porcentaje de carga de chunks, para actualizar la barra de progreso
+ int porcentaje = (int)((chunkIndex + 1) * 100.0 / chunksTotales);
+ OnProgresoActualizado?.Invoke(porcentaje);
+
using var resp = await _httpClient.SendAsync(req, HttpCompletionOption.ResponseHeadersRead);
resp.EnsureSuccessStatusCode();
chunkIndex++;
@@ -85,7 +94,7 @@ public async Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long ma
}
- #endregion
+
public string ObtenerUrlDescarga(Guid id)
{
diff --git a/FrontApp/Servicios/IArchivoService.cs b/FrontApp/Servicios/IArchivoService.cs
index d0edba0..97d7713 100644
--- a/FrontApp/Servicios/IArchivoService.cs
+++ b/FrontApp/Servicios/IArchivoService.cs
@@ -5,7 +5,7 @@ namespace Front.Servicios
{
public interface IArchivoService
{
- Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long maxAllowedSize);
+ Task SubirArchivoAsync(IBrowserFile file, Guid IdCategoria, long maxAllowedSize, Action OnProgresoActualizado);
Task> ObtenerArchivosAsync(Guid? categoriaId = null);
Task ObtenerArchivoAsync(Guid id);
Task> BuscarArchivosAsync(string? q, Guid? categoriaId = null);