asp.net-web-api – MVC Core ZipArchive无效
我正在MVC Core下的Web API调用中创建一个zip文件,但
Windows无法打开生成的文件,声称它无效.
以下是创建存档的代码: ZipArchive archive = new ZipArchive( archiveMS,ZipArchiveMode.Create,true ); // loop over a series of Azure blobs which contain text foreach( BlobPathInfo curBPI in model.Paths ) { // AzureBlobFile is a wrapper for CloudBlockBlob AzureBlobFile blobFile = blobFolder.File( curBPI.BlobPath.FileName ); Stream blobStream = blobFile.OpenRead(); ZipArchiveEntry entry = archive.CreateEntry( zipFolderPath.ToString() ); using( Stream zipStream = entry.Open() ) { blobStream.CopyTo( zipStream ); } } archive.Dispose(); archiveMS.Seek( 0,SeekOrigin.Begin ); return new FileStreamResult( archiveMS,"application/zip" ); 从角度脚本调用此WebAPI方法,并将其转换为链接到元素的客户端blob: // downloadFiles does a POST request and returns a promise downloadFiles( params ) .then( function( success ) { var linkElement = document.createElement( 'a' ); var blob = new Blob( [success.data],{ type: 'application/zip' } ); var url = window.URL.createObjectURL( blob ); linkElement.setAttribute( 'href',url ); linkElement.setAttribute( 'download',fileName ); var clickEvent = new MouseEvent( 'click',{ view: window,bubbles: true,cancelable: false } ); linkElement.dispatchEvent( clickEvent ); 这一切都在于,存档在服务器上创建,下载到客户端,然后通过文件保存对话框保存.但就Windows而言,磁盘上生成的存档无效. Windows错误消息没有帮助,基本上只是声明该文件无效.但我确实注意到另外两件可能很重要的事情: 1)如果我没有在服务器上的zip存档中创建一个条目 – 如果我只是创建存档并下载它 – 它在Windows下正确打开(当然,它表明它没有内容/条目). 2)在检查错误日志时,我注意到以下情况:
关于如何解决这个问题的想法? 解决方法
在使用ZipArchive时,您应该写’使用’.
当IDisposible运行时,它正确完成您的文件. byte [] zipBytes; using (MemoryStream ms = new MemoryStream()) { var file1 = Encoding.ASCII.GetBytes("Hello,world!"); using (var archive = new ZipArchive(ms,true)) { var zipArchiveEntry = archive.CreateEntry("file1.txt",CompressionLevel.Fastest); using (var zipStream = zipArchiveEntry.Open()) { zipStream.Write(file1,file1.Length); } } zipBytes = ms.ToArray(); // good place to assign } return File(zipBytes,"application/zip","Archive.zip"); 这样写的时候会得到坏的zip byte [] zipBytes; using (MemoryStream ms = new MemoryStream()) { var file1 = Encoding.ASCII.GetBytes("Hello,CompressionLevel.Fastest); using (var zipStream = zipArchiveEntry.Open()) { zipStream.Write(file1,file1.Length); } zipBytes = ms.ToArray(); //bad place to assign } } return File(zipBytes,"Archive.zip"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – .NET核心2.0 cookie身份验证 – 不重定向
- webforms – ASP.NET Web窗体(4.5)强类型模型绑定 – ListV
- 互联网级监控平台之内存存储的设计和优化
- asp.net-mvc – Web Api调用返回404错误,GUID作为参数传递
- mvc6与signalr的任何样品?
- asp.net-mvc – ie9:调试时出现恼人的弹出:“错误:’__f
- .net – 存储加密密钥的位置
- asp.net-mvc – 为什么Razor会添加另一个值属性以及如何删除
- asp.net-mvc-4 – 找不到布局页面
- asp.net-mvc – System.Web.HttpRequestBase不包含’Create
- ASP.NET,MySQL与SQL Server中的数据库连接
- 获取Asp.net/iis设置Cache-control:静态文件的m
- asp.net – 是否可以有条件地包含CSS?
- 再论验证码安全:请及时销毁你的验证码
- asp.net-mvc-2 – ASP.NET MVC路由和URL.Action
- asp.net-mvc – redirectToAction()和View()之间
- asp.net – 为本地化设置TemplateField HeaderTe
- asp.net-mvc – Web API返回csv文件
- asp.net-mvc-3 – ASP.NET MVC3维护导航历史
- asp.net-mvc – 必需属性“pageBaseType”未找到