我正在尝试从我的web api控制器下载zip文件.它正在返回文件,但是当我尝试打开时,我收到一个消息,zipfile无效.我已经看到关于这个的其他帖子,响应添加了responseType:’arraybuffer’.仍然不为我工作我也没有在控制台任何错误.
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控制器
[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; } }
更新
我想你将responseType设置在错误的地方,而不是这样:
原文链接:https://www.f2er.com/angularjs/143016.html$http.post('/api/apiZipPipeLine/',model)
尝试这个:
$http.post('/api/apiZipPipeLine/',model,{responseType:'arraybuffer'})
看看this answer了解更多细节.