『QQ:1353814576』

ICSharpCode.SharpZipLib以文件流方式导出压缩包怎么实现


ICSharpCode.SharpZipLib实现压缩文件后以文件流方式导出压缩包

最近重构上一代程序有个批量上传打包压缩文件然后上传压缩包的功能 先要将一个文件文件打包成zip文件保存到本地然后在将打包好的文件上传到阿里云这里有个坑(老程序时不时上传完后它自己却清理不掉导致时间久了服务器磁盘空间紧张)所以就改成了压缩成文件流的方式处理,上传完成后直接释放掉文件流

以下是使用SharpZipLib 实现压缩文件以文件流方式导出的方法

先Nuget 引用三方库 SharpZipLib

ICSharpCode.SharpZipLib实现压缩文件后以文件流方式导出压缩包

实现代码:

/// <summary>
/// 创建压缩文件返回一个内存文件流(使用完记得要释放掉)
/// </summary>
/// <param name="files">文件路径列表</param>
/// <param name="StudyInstanceUID"></param>
/// <returns></returns>
static MemoryStream CreateAliOssZip(List<string> files)
{
            MemoryStream ZipStream = new MemoryStream();
            using (var zip = ZipFile.Create(ZipStream))
            {
                zip.BeginUpdate();//准备更新
                foreach (string file in files)
                {
                    string dcmName = System.IO.Path.GetFileName(file);
                    string childpath=$"\\dic1\\"+dcmName;//压缩包内的文件路径
                    zip.Add(file, childpath);//写入压缩包文件流
                }
                zip.CommitUpdate();//提交变动更新
            }
            ZipStream.Flush();//清空缓冲区
            ZipStream.Position = 0;//强调 这一句很重要
            return ZipStream;
}