.Net Core 多文件打包压缩的实现代码怎么写
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇文章给大家分享的是有关.Net Core 多文件打包压缩的实现代码怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近项目需要实
千家信息网最后更新 2026年11月04日.Net Core 多文件打包压缩的实现代码怎么写
本篇文章给大家分享的是有关.Net Core 多文件打包压缩的实现代码怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用 ICSharpCode.SharpZipLib 最符合项目的要求。
具体实现如下:
1.在 Nuget 中安装 ICSharpCode.SharpZipLib

2.将要打包的文件放到同个文件夹进行压缩:
①压缩文件夹
////// 压缩文件 /// /// 压缩后获得的文件名 public static bool CompressFile(string dir, out string fileName) { string dest = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\" + string.Format("{0:yyyyMMddHHmmss}", DateTime.Now) + ".zip"; //默认压缩在桌面上 if (!Directory.Exists(Path.GetDirectoryName(dest))) //文件不存在就根据路径创建 E:\\test Directory.CreateDirectory(Path.GetDirectoryName(dest)); using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(dest))) { zipStream.SetLevel(6); //压缩级别0-9 CreateZip(dir, zipStream); fileName = dest; zipStream.Finish(); zipStream.Close(); } return true; } ////// 压缩内容到 zipStream 流中 /// /// 源文件 /// 目标文件流(全路径+文件名+.zip) private static void CreateZip(string source, ZipOutputStream zipStream) { Crc32 crc = new Crc32(); string[] files = Directory.GetFileSystemEntries(source); //获得所有文件名称和目录名称 foreach (var file in files) { if (Directory.Exists(file)) //如果是文件夹里有文件则递归 { CreateZip(file, zipStream); } else //如果不是则压缩 { using (FileStream fs = File.OpenRead(file)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string tempFileName = file.Substring(file.LastIndexOf("\\") + 1); //获得当前文件路径的文件名 ZipEntry entry = new ZipEntry(tempFileName); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } } }
②将指定文件打包压缩 (可打包线上文件)
////// 打包线上线下文件 /// /// 文件列表 /// 保存路径 public static void ZipOnlineFile3(ListfileList, string savepath) { //判断保存的文件目录是否存在 if (!File.Exists(savepath)) { var file = new FileInfo(savepath); if (!file.Directory.Exists) { file.Directory.Create(); } } Crc32 crc = new Crc32(); using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savepath))) { zipStream.SetLevel(9); //压缩级别0-9 foreach (var url in fileList) { byte[] buffer = new WebClient().DownloadData(url); string tempFileName = GetFileNameByUrl(url); //获得当前文件路径的文件名 ZipEntry entry = new ZipEntry(tempFileName); entry.DateTime = DateTime.Now; entry.Size = buffer.Length; crc.Reset(); crc.Update(buffer); zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } }
从文件路径读取文件名的方法:
public static string GetFileNameByUrl(string url) { //判断路径是否为空 if (string.IsNullOrWhiteSpace(url)) return null; //判断是否为线上文件 if (url.ToLower().StartsWith("http")) { return url.Substring(url.LastIndexOf("/") + 1); } else { return url.Substring(url.LastIndexOf("\\") + 1); } }通过此方法生成的压缩包,所有文件都会显示在同一层。
③如果需要在文件中创建目录,需要在文件名称上指定文件路径
添加工具类:
////// 文件对象 /// public class FileItem { ////// 文件名称 /// public string FileName { get; set; } ////// 文件路径 /// public string FileUrl { get; set; } }压缩文件的方法:////// 打包线上线下文件 /// /// 压缩文件名称 /// 文件列表 /// 保存路径 public static string ZipFiles(string zipName, ListfileList, out string error) { error = string.Empty; string path = string.Format("/files/zipFiles/{0}/{1}/{2}/", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); //文件保存目录 string directory = FileSavePath + path; string url = FileHostUrl.TrimEnd('/') + path + zipName; string savePath = directory + zipName; try { if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savePath))) { zipStream.SetLevel(9); //压缩级别0-9 foreach (var item in fileList) { byte[] buffer = new WebClient().DownloadData(item.FileUrl); ZipEntry entry = new ZipEntry(item.FileName); entry.DateTime = DateTime.Now; entry.Size = buffer.Length; zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } } catch (Exception ex) { error = "文件打包失败:" + ex.Message; } return url; }
调用参数示例:
{ "zipName": "test.zip", "fileList": [ { "fileName": "123.png", "fileUrl": "https://file.yidongcha.cn/files/uploadfiles/image/2021/11/15/11c6de395fcc484faf4745ade62cf6e6.png" }, { "fileName": "123/456/789.jpg", "fileUrl": "https://file.yidongcha.cn/files/uploadfiles/image/2021/11/15/fe922b250acf4344b8ca4d2aad6e0355.jpg" } ]}生成的结果:

以上就是.Net Core 多文件打包压缩的实现代码怎么写,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
文件
路径
名称
文件名
目录
文件夹
方法
级别
代码
更多
知识
篇文章
项目
生成
实用
内容
功能
参数
对象
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳恒合互联网络科技有限公司
厦门中拓互联网络科技有限公司
金融科技还是互联网
互联网最新的科技有限公司
互联网科技的
互联网络科技有限公司
万易互联网科技
青岛互联网科技公司
互联网科技公司电话
互联网科技的英文
互联网前沿科技
互联网科技咨询
太原新华互联网科技学校怎么样
互联网和高科技公司
小米互联网科技园设置
互联网科技公司实习生
深圳市优智互联网科技有限公司
银行科技岗属于互联网吗
易租星互联网科技有限公司
科技发展第三阶段互联网时代
上海互联网科技有限公司
天津摩尔互联网科技
睿民互联网科技
多迪互联网科技有限公司
成都仁贤领冠互联网科技有限公司
北京大学互联网科技怎么样
互联网科技如何创业
互联网领先科技活动
科技信息时代互联网发展
好易买互联网科技