DotNetZip 异常错误状态(无效文字/长度代码)
Posted
技术标签:
【中文标题】DotNetZip 异常错误状态(无效文字/长度代码)【英文标题】:DotNetZip Exception Bad state (invalid literal/length code) 【发布时间】:2018-10-03 18:49:55 【问题描述】:NET MVC 4 应用程序,在这个应用程序中,我必须下载由 Zip 文件中的字节数组列表表示的多个文件,因此我使用了 DotNetZip 库。当我执行这段代码时:
using (MemoryStream ms = new MemoryStream())
using (var archive = new ZipFile())
foreach (var item in byteArrays)
var entry = archive.AddEntry("file" + i + ".pdf", item);
i++;
archive.Save("All.zip");
using (var zipStream = entry.OpenReader())
zipStream.Write(item, 0, item.Length);
return File(ms.ToArray(), "application/zip", "all.zip");
在这一行:
zipStream.Write(item, 0, item.Length);
我收到了这个错误:
错误状态(无效文字/长度代码)
Ionic.Zlib.ZlibException 未被用户代码处理 HResult=-2146233088 消息=错误状态(无效文字/长度代码) 来源=DotNetZip StackTrace: 在 Ionic.Zlib.InflateManager.Inflate(FlushType 冲洗) 在 Ionic.Zlib.ZlibCodec.Inflate(FlushType 刷新) 在 Ionic.Zlib.ZlibBaseStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Ionic.Zlib.DeflateStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Ionic.Crc.CrcCalculatorStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Host.Web.Areas.FranceArea.Controllers.FranceController.downloadMultiplefile() 在 C:\Projects\Oddo.Web.OBAM_Icn\Host\Host.Web\Areas\FranceArea\Controllers\FranceController.cs:line 503 在 lambda_method(闭包,ControllerBase,对象 []) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41() 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult 异步结果) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass37.c__DisplayClass39.b__33() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49() 内部异常:
【问题讨论】:
打开读写器? 【参考方案1】:您无需调用zipStream.Write
,因为您已经在.AddEntry
调用中传递了数据。
这对我有用:
var i = 1;
using (var outStream = new MemoryStream())
using (var archive = new ZipFile())
foreach (var item in byteArrays)
using (MemoryStream ms = new MemoryStream(item))
var entry = archive.AddEntry($"filei++.pdf", ms);
archive.Save(outStream);
outStream.Position = 0;
return File(outStream.ToArray(), "application/zip", "all.zip");
【讨论】:
感谢您的回复,它可以下载存档,但是当我打开 zip 并尝试打开或提取文件时,我发现文件无法打开,因为它已损坏...这种问题的原因是什么? 您可以检查您的字节数组是否是有效的 pdf,还可以检查 zip 中的文件是否与您的字节数组具有相同的长度 是的,当我打开存档并检查文件的大小时,我可以看到它们保持初始大小,这意味着没有丢失数据:/ 但问题仍然存在以上是关于DotNetZip 异常错误状态(无效文字/长度代码)的主要内容,如果未能解决你的问题,请参考以下文章
Json.NET 中的异常:处于“开始”状态的令牌 PropertyName 将导致无效的 JavaScript 对象
异常类型:ValueError at /music/1/favourite/ 异常值:int() 的无效文字,基数为 10:'on'