【问题标题】:DotNetZip Exception Bad state (invalid literal/length code)DotNetZip 异常错误状态(无效文字/长度代码)
【发布时间】: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 控制器上下文,IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) 在 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.WrappedAsyncResult1.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() 内部异常:

【问题讨论】:

  • 打开读写器?

标签: c# asp.net-mvc dotnetzip


【解决方案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($"file{i++}.pdf", ms);
                archive.Save(outStream);
            }
        }
    }
    outStream.Position = 0;
    return File(outStream.ToArray(), "application/zip", "all.zip");
}

【讨论】:

  • 感谢您的回复,它可以下载存档,但是当我打开 zip 并尝试打开或提取文件时,我发现文件无法打开,因为它已损坏...这种问题的原因是什么?
  • 您可以检查您的字节数组是否是有效的 pdf,还可以检查 zip 中的文件是否与您的字节数组具有相同的长度
  • 是的,当我打开存档并检查文件的大小时,我可以看到它们保持初始大小,这意味着没有丢失数据:/ 但问题仍然存在
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多