编程语言
首页 > 编程语言> > c# – 使用dotnetzip压缩文件,打开时它已损坏

c# – 使用dotnetzip压缩文件,打开时它已损坏

作者:互联网

我从一个字节数组在控制器中创建一个zip文件,然后将zip文件作为fileresult返回.当我下载zip文件并解压缩文件时,它已损坏.我是这样做的:

byte[] fileBytes =array
MemoryStream fileStream = new MemoryStream(fileBytes);
MemoryStream outputStream = new MemoryStream();
fileStream.Seek(0, SeekOrigin.Begin);

using (ZipFile zipFile = new ZipFile())
{
    zipFile.AddEntry(returnFileName, fileStream);
    zipFile.Save(outputStream);
}

outputStream.Position = 0;

FileStreamResult fileResult = new FileStreamResult(outputStream, System.Net.Mime.MediaTypeNames.Application.Zip);
fileResult.FileDownloadName = returnFileName + ".zip";

return fileResult;

解决方法:

你可能不幸遇到了DotNetZip中的一个漏洞.例如有问题取决于文件大小(https://dotnetzip.codeplex.com/workitem/14087).

不幸的是,DotNetZip存在一些关键问题,似乎不再积极维护该项目.更好的替代方案是使用SharpZipLib(如果您遵守他们的基于GPL的许可证),或者使用.NET ports of zlib之一.

如果您使用的是.NET 4.5,则可以使用System.IO.Compression命名空间中的内置类.以下示例可以在ZipArchive类的文档中找到:

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var zipToOpen = 
                new FileStream(@"c:\tmp\release.zip", FileMode.Open))
            {
                using (var archive = 
                     new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    var readmeEntry = archive.CreateEntry("Readme.txt");
                    using (var writer = new StreamWriter(readmeEntry.Open()))
                    {
                            writer.WriteLine("Information about this package.");
                            writer.WriteLine("========================");
                    }
                }
            }
        }
    }
}

标签:c,asp-net-mvc,dotnetzip
来源: https://codeday.me/bug/20190625/1286534.html