下载 zip 文件 ASP MVC 时出现问题
本文关键字:问题 MVC zip 文件 ASP 下载 | 更新日期: 2023-09-27 17:56:49
我正在使用一个将一些文件压缩在一起的ASP MVC站点。它似乎正在工作,但是当我尝试提取文件时,我得到了
An unexpected error is keeping you from copying the file. If you continue the receive this error, you can use the error code to search for help with this problem.
enter code here
Error 0x80004005: Unspecified error
7 Zip说CRC失败了。文件已损坏。
似乎在编写或下载zip时某些东西已损坏。我尝试了 2 种不同的方法来下载具有相同结果的文件。
public ActionResult DownloadFiles()
{
List<string> files = GetFileList();
using (ZipFile zip = new ZipFile())
{
foreach (string file in files)
zip.AddFile(file, string.Empty);
MemoryStream output = new MemoryStream();
zip.Save(output);
return File(output.ToArray(), "application/zip", "file.zip");
}
}
public void DownloadFiles()
{
List<string> files = GetFileList();
using (ZipFile zip = new ZipFile())
{
foreach (string file in files)
zip.AddFile(file, string.Empty);
Response.Clear();
Response.BufferOutput = false;
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment; filename=file.zip");
zip.Save(Response.OutputStream);
Response.End();
}
}
<button onclick="fn_DownloadFiles()">Download Selected</button>
function fn_DownloadSelectedFiles()
{
window.location.href = "/Files/DownloadFiles"
}
文件损坏的任何原因?
我也试过这个
public ActionResult DownloadFiles(string filePaths)
{
List<string> files = GetFileList();
using (MemoryStream zipStream = new MemoryStream())
using (ZipArchive zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
{
foreach (string file in files)
{
ZipArchiveEntry entry = zipArchive.CreateEntry(file, CompressionLevel.Fastest);
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (Stream entryStream = entry.Open())
fileStream.CopyTo(entryStream);
}
return File(zipStream.ToArray(), "application/zip", "files.zip"));
}
}
有了这个,我得到Windows无法打开文件夹。压缩(压缩)文件夹无效。
您使用的是哪个版本的 DotNetZip?最新版本中存在错误。尝试安装旧版本(1.9)并运行代码。如果它有效,那么该错误仍未修复。
下面是工作项的链接。https://dotnetzip.codeplex.com/workitem/14087
我使用以下代码进行了测试,根本没有发现任何问题。以下代码是安装最新的 NuGet 包DotNetZip
后的完整工作示例。我不知道 GetFiles 做了什么,所以我用我从硬编码目录中拾取的一些文件替换了它。我猜你的问题可能在那里,所以也许你可以分享该代码。同样,这是使用您说明的MVC控制器的测试,我只更改了一件事以表明没有问题
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using Ionic.Zip;
namespace MvcTesting.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
// replace C:'PickAFolderWithSomeFiles' with a folder that has some files that you can zip to test
List<string> files = System.IO.Directory.GetFiles(@"C:'PickAFolderWithSomeFiles'").ToList();
using (ZipFile zip = new ZipFile())
{
foreach (string file in files)
zip.AddFile(file, string.Empty);
using (MemoryStream output = new MemoryStream())
{
zip.Save(output);
return File(output.ToArray(), "application/zip", "file.zip");
}
}
}
}
}