Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to download a zip file

Tags:

I am trying to download a zip file from my web api controller. It is returning the file but I am getting a message the zipfile is invalid when i try to open. I have seen other posts about this and the response was adding the responseType: 'arraybuffer'. Still isn't working for me. I'm not getting any errors in the console either.

  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();     }); 

api controller

 [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;         }     } 

Update pic

like image 788
texas697 Avatar asked May 11 '15 00:05

texas697


People also ask

How do I download a ZIP file in Chrome?

Google Chrome saves zip files as zip file by default. If not, you can right-click the zip-file link (if you have a right mouse button). It will say, "save link as".


1 Answers

I think you're setting the responseType in the wrong place, instead of this:

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

Try this:

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

Take a look at this answer for more details.

like image 143
Buddy Avatar answered Oct 21 '22 08:10

Buddy