es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ASP.NET Minimal API Cómo devolver/descargar archivos desde una URL

Estoy trabajando en una API mínima, lo que estoy intentando es que cuando el usuario visite /download, se descargue de inmediato mi imagen llamada add.png.

Pero no importa lo que intente, no funciona porque solo obtengo una página vacía con solo {}.

¿Esto es posible? Si es así, ¿cómo?

Este es el código que he intentado hasta ahora. (¡Obtuve acceso denegado con todos los permisos en la ubicación!)

app.MapGet("/download", async () =>
  {
      var path = "add.png";
      using (var stream = new FileStream(path, FileMode.Open))
      {
          await stream.CopyToAsync(stream);
      }
      var ext = Path.GetExtension(path).ToLowerInvariant();
      var result = (ext, Path.GetFileName(path));
      return result;
  });

¿Cómo puedo hacer que cuando el usuario utilice /download dentro de mi API, descargue un archivo?

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para descargar un archivo cuando el usuario visite /download en una API mínima utilizando C# y .NET 6.0, puedes modificar el código existente para devolver un FileStreamResult con el método File. Aquí tienes un ejemplo de fragmento de código:

    using Microsoft.AspNetCore.Mvc;
    
    var builder = WebApplication.CreateBuilder(args);
    var app = builder.Build();
    
    app.MapGet("/download", () =>
    {
        var path = "add.png";
        var fileStream = new FileStream(path, FileMode.Open);
    
        var contentTypeProvider = new FileExtensionContentTypeProvider();
        if (!contentTypeProvider.TryGetContentType(path, out var contentType))
        {
            contentType = "application/octet-stream";
        }
    
        return new FileStreamResult(fileStream, new Microsoft.Net.Http.Headers.MediaTypeHeaderValue(contentType))
        {
            FileDownloadName = "add.png"
        };
    });
    
    app.Run();
    

    En este código, creamos un nuevo FileStream para el archivo especificado y determinamos su tipo MIME utilizando una instancia de FileExtensionContentTypeProvider. Si no se puede determinar el tipo MIME, se utiliza por defecto “application/octet-stream”. Luego, devolvemos un FileStreamResult con el flujo de archivo abierto y el tipo MIME determinado, junto con el nombre de archivo deseado.

    Con este código, cuando el usuario visite /download, su navegador debería solicitarle descargar el archivo add.png.

Comments are closed.