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 enumeraci�n p�blica 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 c�digo 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 c�digo 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", c�digo 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 }