无法打开从 System.IO.Compression 命名空间创建的 zip 文件

我正在尝试压缩不同数量的文件,以便可以向用户提供一个 zip 文件夹,而不必单击多个锚标记。我使用 asp.net core 3.1 中的 System.IO.Compression 命名空间来创建 zip 文件夹。


这是我用来创建 Zip 文件夹的代码。


        public IActionResult DownloadPartFiles(string[] fileLocations, string[] fileNames)

        {

            List<InMemoryFile> files = new List<InMemoryFile>();

            for (int i = 0; i < fileNames.Length; i++)

            {

                InMemoryFile inMemoryFile = GetInMemoryFile(fileLocations[i], fileNames[i]).Result;

                files.Add(inMemoryFile);

            }

            byte[] archiveFile;

            using (MemoryStream archiveStream = new MemoryStream())

            {

                using (ZipArchive archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true))

                {

                    foreach (InMemoryFile file in files)

                    {

                        ZipArchiveEntry zipArchiveEntry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);

                        using (Stream zipStream = zipArchiveEntry.Open())

                        {

                            zipStream.Write(file.Content, 0, file.Content.Length);

                            zipStream.Close();

                        }

                    }

                    archiveStream.Position = 0;

                }

                archiveFile = archiveStream.ToArray();

            }


            return File(archiveFile, "application/octet-stream");

        }

我尝试压缩的文件是远程存储的,因此我用这段代码来获取它们。InMemoryFile 是一个将文件名和文件字节组合在一起的类。


使用 Ajax 调用 DownloadPartFiles 方法。我使用 javascript 获取文件的远程路径及其各自的名称,并将它们传递到 Ajax 调用中。


翻过高山走不出你
浏览 182回答 1
1回答

ITMISS

这是我用来创建一个包含文件的 zip 文件夹的修订方法。      public IActionResult DownloadPartFiles([FromBody] FileRequestParameters parameters)        {            List<InMemoryFile> files = new List<InMemoryFile>();            for (int i = 0; i < parameters.FileNames.Length; i++)            {                InMemoryFile inMemoryFile = GetInMemoryFile(parameters.FileLocations[i], parameters.FileNames[i]).Result;                files.Add(inMemoryFile);            }            byte[] archiveFile = null;            using (MemoryStream archiveStream = new MemoryStream())            {                using (ZipArchive archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true))                {                    foreach (InMemoryFile file in files)                    {                        ZipArchiveEntry zipArchiveEntry = archive.CreateEntry(file.FileName, CompressionLevel.Optimal);                        using (MemoryStream originalFileStream = new MemoryStream(file.Content))                        using (Stream zipStream = zipArchiveEntry.Open())                        {                            originalFileStream.CopyTo(zipStream);                        }                    }                }                archiveFile = archiveStream.ToArray();            }            return File(archiveFile, "application/octet-stream");        }我仍然不知道为什么以前的方法会出现问题,所以如果有人知道未来的答案,我很想知道。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript