我正在尝试从我的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设置在错误的地方,而不是这样:
$http.post('/api/apiZipPipeLine/',model)
尝试这个:
$http.post('/api/apiZipPipeLine/',model,{responseType:'arraybuffer'})
看看this answer了解更多细节.
原文地址:https://www.jb51.cc/angularjs/143016.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。