我正在尝试压缩不同数量的文件,以便可以向用户提供一个 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 调用中。
ITMISS
相关分类