hacer gratis from descomprimir descargar como archivos archivo abrir angularjs asp.net-web-api httpresponse zipfile pushstreamcontent

angularjs - gratis - cómo descargar un archivo zip



zip descargar (2)

Creo que estás configurando el tipo de respuesta en el lugar equivocado, en lugar de esto:

$http.post(''/api/apiZipPipeLine/'', model)

Prueba esto:

$http.post(''/api/apiZipPipeLine/'', model, {responseType:''arraybuffer''})

Echa un vistazo a esta respuesta para más detalles.

Estoy tratando de descargar un archivo zip desde mi controlador de API web. Está devolviendo el archivo pero recibo un mensaje que el archivo zip no es válido cuando intento abrir. He visto otras publicaciones sobre esto y la respuesta fue agregar el tipo de respuesta: ''arraybuffer''. Todavía no está funcionando para mí. No estoy recibiendo ningún error en la consola tampoco.

var model = $scope.selection; var res = $http.post(''/api/apiZipPipeLine/'', model) res.success(function (response, status, headers, config) { saveAs(new Blob([response], { type: "application/octet-stream", responseType: ''arraybuffer'' }), ''reports.zip''); notificationFactory.success(); });

controlador de api

[HttpPost] [ActionName("ZipFileAction")] public HttpResponseMessage ZipFiles([FromBody]int[] id) { if (id == null) {//Required IDs were not provided throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)); } List<Document> documents = new List<Document>(); using (var context = new ApplicationDbContext()) { foreach (int NextDocument in id) { Document document = context.Documents.Find(NextDocument); if (document == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } documents.Add(document); } var streamContent = new PushStreamContent((outputStream, httpContext, transportContent) => { try { using (var zipFile = new ZipFile()) { foreach (var d in documents) { var dt = d.DocumentDate.ToString("y").Replace(''/'', ''-'').Replace('':'', ''-''); string fileName = String.Format("{0}-{1}-{2}.pdf", dt, d.PipeName, d.LocationAb); zipFile.AddEntry(fileName, d.DocumentUrl); } zipFile.Save(outputStream); //Null Reference Exception } } finally { outputStream.Close(); } }); streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); streamContent.Headers.ContentDisposition.FileName = "reports.zip"; var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = streamContent }; return response; } }

Actualizar


De hecho, está correctamente agregando responseType:''arraybuffer'' . Eso, agregado al siguiente código cuando se recibió, la respuesta de ajax solicitará un archivo para descargar:

var a = document.createElement(''a''); var blob = new Blob([responseData], {''type'':"application/octet-stream"}); a.href = URL.createObjectURL(blob); a.download = "filename.zip"; a.click();