Descargar archivo desde la aplicaci�n web ASP.NET

Descargar archivo del servidor

Es una caracter�stica com�n de las aplicaciones web descargar un archivo desde su servidor web. Para reducir el tama�o de los datos transferidos por cable, es posible que desee comprimir el archivo. Es conveniente que el usuario elija el formato del archivo a descargar. Este ejemplo le brinda algunas ideas sobre c�mo administrarlo.

Preparar la aplicaci�n web ASP.NET

Usando Visual Studio comp�n la aplicaci�n web ASP.NET Core. Que sea una aplicaci�n web sencilla con Razor Pages. Al utilizar NuGet Package Manager, incluye dos paquetes para su proyecto: Aspose.Zip para compresi�n y Aspose.BarCode para generaci�n de datos de muestra.
Busque la p�gina Index.cshtml dentro de su Explorador de soluciones. Ahora, agregue un formulario a esa p�gina con un bot�n de env�o dentro. Necesitaba iniciar la solicitud de descarga por parte del usuario.
Agregue a esa p�gina el siguiente formato HTML:

1<form method="post">    
2    <input type="submit" value="Download" />
3</form>

Listar formatos de archivo

Para este ejemplo, elegimos tres de los formatos de archivo que Aspose.ZIP admite: ZIP, Bzip2, 7z. Redacte una enumeraci�n para aquellos formatos que marquen a sus miembros con DisplayAttribute
El c�digo de enumeraci�n ser�:

 1  enumeracin pblica ArchiveFormat
 2  {
 3      [Mostrar(Nombre = "ZIP")]
 4      Cremallera,
 5
 6      [Display(Name = "Bzip2")]
 7      Bz2,
 8
 9      [Display(Name = "7z")]
10      SevenZip
11  }

A continuaci�n, debe crear una lista desplegable dentro del formulario web. Es bastante simple con el asistente HTML GetEnumSelectList: no es necesario generar elementos con un bucle. Simplemente coloque dentro de su formulario en Index.cshtml el siguiente fragmento:

1<seleccione name="archiveFormat" asp-items="Html.GetEnumSelectList<ArchiveFormat>()"></select>

Ejecute la aplicaci�n y busque la p�gina de �ndice. Ver�s algo como eso:

Manejando la solicitud del usuario

Entonces, el usuario especifica el formato de archivo deseado y presiona “Descargar”. �C�mo manejar su solicitud en el lado del servidor? Usando el enfoque ASP.NET necesitamos componer un m�todo OnPost apropiado para la fuente Index.cshtml.cs. Aqu� est� el borrador del m�todo:

 1 
 2
 3  public FileStreamResult OnPost([FromForm] ArchiveFormat archiveFormat)
 4  {
 5    cambiar (formato de archivo)
 6    {
 7      caso ArchiveFormat.Zip:
 8        ...
 9        devolver nuevo FileStreamResult(resultado, "aplicaci�n/zip") {FileDownloadName = "c�digo de barras.zip"};
10      caso ArchiveFormat.Bzip2:
11        ...
12        devolver nuevo FileStreamResult(resultado, "application/x-bzip2") {FileDownloadName = "barcode.bmp.bz2"};
13      caso ArchiveFormat.SevenZip:
14        ...
15        devolver nuevo FileStreamResult(resultado, "aplicaci�n/x-7z-comprimido") {FileDownloadName = "barcode.7z"};                           
16    }
17  }

Entonces, para el tipo de archivo solicitado debemos preparar el archivo correspondiente a partir de datos de muestra (variable resultado) y responder con Microsoft.AspNetCore.Mvc.FileStreamResult que tenga el tipo MIME adecuado.

Generando datos de muestra

Usamos la biblioteca Aspose.BarCode para generar una imagen BMP de c�digo de barras usando esta instrucci�n. El fragmento de la generaci�n del flujo de datos:

 1  Stream privado Generar cdigo de barras()
 2  {
 3    generador var = nuevo Aspose.BarCode.Generation.BarcodeGenerator(
 4        Aspose.BarCode.Generation.EncodeTypes.Pdf417, "Este es un texto de c�digo de prueba. \n Segunda l�nea \n tercera l�nea.");
 5              
 6    generator.Parameters.Barcode.XDimension.Millimeters = 0.6f;
 7    generator.Parameters.Barcode.BarHeight.Millimeters = 1.2f;
 8
 9    MemoryStream result = new MemoryStream();
10    generator.Save(result, Aspose.BarCode.Generation.BarCodeImageFormat.Bmp);
11    result.Seek(0, SeekOrigin.Begin);
12    return result;
13  }

Respuesta final

Ahora tenemos un flujo de datos sin procesar del m�todo “GenerateBarcode”. Comprimirlo adecuadamente en cada caso. A continuaci�n se muestra el m�todo final OnPost.

 1public FileStreamResult OnPost([FromForm] ArchiveFormat archiveFormat)
 2  {
 3      usando (var cdigo de barras = this.GenerateBarcode())
 4      {
 5          resultado var = nuevo MemoryStream();
 6          cambiar (formato de archivo)
 7          {
 8              caso ArchiveFormat.Zip:
 9                  usando (Archivar a = nuevo Archivo())
10                  {
11                      a.CreateEntry("c�digo de barras.bmp", cdigo de barras);
12                      a.Guardar(resultado);
13                  }
14                  
15                  result.Seek(0, SeekOrigin.Begin);
16                  return new FileStreamResult(result, "application/zip") {FileDownloadName = "barcode.zip"};
17              case ArchiveFormat.Bzip2:
18                  using (Bzip2Archive a = new Bzip2Archive())
19                  {
20                      a.SetSource(barcode);
21                      a.Save(result);
22                  }
23
24                  result.Seek(0, SeekOrigin.Begin);
25                  return new FileStreamResult(result, "application/x-bzip2") {FileDownloadName = "barcode.bmp.bz2"};
26              case ArchiveFormat.SevenZip:
27                  using (SevenZipArchive a = new SevenZipArchive())
28                  {
29                      a.CreateEntry("barcode.bmp", barcode);
30                      a.Save(result);
31                  }
32
33                  result.Seek(0, SeekOrigin.Begin);
34                  return new FileStreamResult(result, "application/x-7z-compressed") {FileDownloadName = "barcode.7z"};
35              default:
36                  throw new ArgumentOutOfRangeException(nameof(archiveFormat));
37          }
38      }
39  }

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.