.Net Core 多文件打包压缩的实现代码怎么写(云服务器、云主机、高防IP、高防服务器、香港服务器、美国服务器,开发技术)

时间:2024-05-03 06:59:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用 ICSharpCode.SharpZipLib 最符合项目的要求。

具体实现如下:

1.在 Nuget 中安装 ICSharpCode.SharpZipLib

.Net Core 多文件打包压缩的实现代码怎么写

2.将要打包的文件放到同个文件夹进行压缩:

①压缩文件夹

///<summary>///压缩文件///</summary>///<paramname="fileName">压缩后获得的文件名</param>publicstaticboolCompressFile(stringdir,outstringfileName){stringdest=System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop)+"\\"+string.Format("{0:yyyyMMddHHmmss}",DateTime.Now)+".zip";//默认压缩在桌面上if(!Directory.Exists(Path.GetDirectoryName(dest)))//文件不存在就根据路径创建E:\\testDirectory.CreateDirectory(Path.GetDirectoryName(dest));using(ZipOutputStreamzipStream=newZipOutputStream(File.Create(dest))){zipStream.SetLevel(6);//压缩级别0-9CreateZip(dir,zipStream);fileName=dest;zipStream.Finish();zipStream.Close();}returntrue;}///<summary>///压缩内容到zipStream流中///</summary>///<paramname="source">源文件</param>///<paramname="zipStream">目标文件流(全路径+文件名+.zip)</param>privatestaticvoidCreateZip(stringsource,ZipOutputStreamzipStream){Crc32crc=newCrc32();string[]files=Directory.GetFileSystemEntries(source);//获得所有文件名称和目录名称foreach(varfileinfiles){if(Directory.Exists(file))//如果是文件夹里有文件则递归{CreateZip(file,zipStream);}else//如果不是则压缩{using(FileStreamfs=File.OpenRead(file)){byte[]buffer=newbyte[fs.Length];fs.Read(buffer,0,buffer.Length);stringtempFileName=file.Substring(file.LastIndexOf("\\")+1);//获得当前文件路径的文件名ZipEntryentry=newZipEntry(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);}}}}

②将指定文件打包压缩 (可打包线上文件)

///<summary>///打包线上线下文件///</summary>///<paramname="fileList">文件列表</param>///<paramname="savepath">保存路径</param>publicstaticvoidZipOnlineFile3(List<string>fileList,stringsavepath){//判断保存的文件目录是否存在if(!File.Exists(savepath)){varfile=newFileInfo(savepath);if(!file.Directory.Exists){file.Directory.Create();}}Crc32crc=newCrc32();using(ZipOutputStreamzipStream=newZipOutputStream(File.Create(savepath))){zipStream.SetLevel(9);//压缩级别0-9foreach(varurlinfileList){byte[]buffer=newWebClient().DownloadData(url);stringtempFileName=GetFileNameByUrl(url);//获得当前文件路径的文件名ZipEntryentry=newZipEntry(tempFileName);entry.DateTime=DateTime.Now;entry.Size=buffer.Length;crc.Reset();crc.Update(buffer);zipStream.PutNextEntry(entry);zipStream.Write(buffer,0,buffer.Length);}}}

从文件路径读取文件名的方法:

publicstaticstringGetFileNameByUrl(stringurl){//判断路径是否为空if(string.IsNullOrWhiteSpace(url))returnnull;//判断是否为线上文件if(url.ToLower().StartsWith("http")){returnurl.Substring(url.LastIndexOf("/")+1);}else{returnurl.Substring(url.LastIndexOf("\\")+1);}}

通过此方法生成的压缩包,所有文件都会显示在同一层。

③如果需要在文件中创建目录,需要在文件名称上指定文件路径

添加工具类:

///<summary>///文件对象///</summary>publicclassFileItem{///<summary>///文件名称///</summary>publicstringFileName{get;set;}///<summary>///文件路径///</summary>publicstringFileUrl{get;set;}}压缩文件的方法:///<summary>///打包线上线下文件///</summary>///<paramname="zipName">压缩文件名称</param>///<paramname="fileList">文件列表</param>///<paramname="savepath">保存路径</param>publicstaticstringZipFiles(stringzipName,List<FileItem>fileList,outstringerror){error=string.Empty;stringpath=string.Format("/files/zipFiles/{0}/{1}/{2}/",DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day);//文件保存目录stringdirectory=FileSavePath+path;stringurl=FileHostUrl.TrimEnd('/')+path+zipName;stringsavePath=directory+zipName;try{if(!Directory.Exists(directory)){Directory.CreateDirectory(directory);}using(ZipOutputStreamzipStream=newZipOutputStream(File.Create(savePath))){zipStream.SetLevel(9);//压缩级别0-9foreach(variteminfileList){byte[]buffer=newWebClient().DownloadData(item.FileUrl);ZipEntryentry=newZipEntry(item.FileName);entry.DateTime=DateTime.Now;entry.Size=buffer.Length;zipStream.PutNextEntry(entry);zipStream.Write(buffer,0,buffer.Length);}}}catch(Exceptionex){error="文件打包失败:"+ex.Message;}returnurl;}

调用参数示例:

{"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 多文件打包压缩的实现代码怎么写

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:.Net Core 多文件打包压缩的实现代码怎么写的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue文件中的template怎么使用下一篇:

14 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18