一、序言

  环境:NetCore 3.1

  项目类型:Web

二、使用ZipFile压缩本地文件

var filePath = Directory.GetCurrentDirectory() + $@"\ImgZip\{DateTime.Now:yyyy-MM-dd}";
using (ZipFile zip = ZipFile.Create(@"D:\test.zip"))
{
zip.BeginUpdate();
zip.SetComment("这是我的压缩包");
zip.AddDirectory(filePath); //添加一个文件夹(这个方法不会压缩文件夹里的文件)
zip.Add(filePath + @"\118e0e67b82e43698b447f1d79a3f9a0.jpg"); //添加文件夹里的文件
zip.CommitUpdate();
}
FileStream fileStream = System.IO.File.OpenRead(@"D:\test.zip");//打开压缩文件
buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, buffer.Length);
fileStream.Close();
return File(buffer , "application/zip", "118e0e67b82e43698b447f1d79a3f9a0.zip");

三、使用ZipOutputStream 压缩流文件

//获取远程文件,并读取为流文件
string Url = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1597509647515&di=3e0ca14b97aafdfd69fc60d3323eec06&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D3571592872%2C3353494284%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1200%26h%3D1290";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//超时时间
request.Timeout = 60000;
//获取回写流
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
MemoryStream outstream = new MemoryStream();
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = stream.Read(buffer, 0, bufferLen)) > 0)
{
outstream.Write(buffer, 0, count);
}
byte[] result = null;
//创建压缩流
using (MemoryStream ms = new MemoryStream())
{
using ZipOutputStream zipStream = new ZipOutputStream(ms); //zipStream.Password = "123456";//设置压缩包密码
//ZipEntry 斜杠表示文件夹 为自动按照填写的路径生成多级目录
ZipEntry entry = new ZipEntry(@"文件夹1\文件夹2\118e0e67b82e43698b447f1d79a3f9a0.jpg")
{
DateTime = DateTime.Now,//创建时间
IsUnicodeText = true//解决中文乱码
};
zipStream.PutNextEntry(entry); zipStream.Write(outstream.ToArray(), 0, bytes.Length); zipStream.CloseEntry(); zipStream.IsStreamOwner = false; zipStream.Finish(); zipStream.Close(); ms.Position = 0;
//压缩后的数据被保存到了byte[]数组中。
result = ms.ToArray();
}
return File(result, "application/zip", "118e0e67b82e43698b447f1d79a3f9a0.zip");

NetCore使用ZipFile 和ZipOutputStream的更多相关文章

  1. java——操作文件

    Java文件操作,共实现了文件复制(单个文件和多层目录文件),文件移动(单个文件和多层目录文件),文件删除(单个文件和多层目录文件),文件压缩 (单个文件),文件解压(单个文件),文件分割(将一个大文 ...

  2. 导出数据库数据制成Excel和txt

    引用ICSharpCode.SharpZipLib.dll 1.编写压缩和解压代码 using System; using System.Collections.Generic; using Syst ...

  3. 利用ICSharpCode.SharpZipLib.Zip进行文件压缩

    官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOu ...

  4. 使用c#将多个文件放入文件夹中,并压缩下载

    ZipClass.cs  这个是一个压缩文件的类,可直接复制使用,使用到的命名空间是 using System.IO;using ICSharpCode.SharpZipLib;using ICSha ...

  5. 在ASP.NET中实现压缩多个文件为.zip文件,实现批量下载功能 (转载并优化处理篇)

    转自:http://blog.csdn.net/yanlele424/article/details/6895986 这段时间一直在做一个网站,其中遇到了一个问题,就是在服务器端压缩多个服务器端的文件 ...

  6. Java ZIP File Example---refernce

    In this tutorial we are going to see how to ZIP a file in Java. ZIP is an archive file format that e ...

  7. [压缩解压缩] SharpZip--压缩、解压缩帮助类

    里面有三个类都是用于压缩和解压缩的.大家看下图片 看下面代码吧 /// <summary> /// 类说明:SharpZip /// 编 码 人:苏飞 /// 联系方式:361983679 ...

  8. 重新开始学习javase_IO

    一,认识IO 通过数据流.序列化和文件系统提供系统输入和输出. 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要 ...

  9. Android 打造自己的个性化应用(五):仿墨迹天气实现续--> 使用Ant实现zip/tar的压缩与解压

    上一篇中提到对于Zip包的解压和压缩需要借助Ant 实现,我经过参考了其他的资料,整理后并加上了一些自己的看法: 这里就具体地讲下如何使用Ant进行解压缩及其原因: java中实际是提供了对  zip ...

  10. Android 打造自己的个性化应用(四):仿墨迹天气实现-->自定义扩展名的zip格式的皮肤

    在这里谈一下墨迹天气的换肤实现方式,不过首先声明我只是通过反编译以及参考了一些网上其他资料的方式推测出的换肤原理, 在这里只供参考. 若大家有更好的方式, 欢迎交流. 墨迹天气下载的皮肤就是一个zip ...

随机推荐

  1. 简单的sql注入2

    尝试 1 1' 1" 发现1'还是会报错,所以注入口还是1' 再试试1' and '1'='1发现报出SQLi detected! 取消空格试试1'and'1'='1 似乎可以进入,应该就是 ...

  2. 为什么Linux需要虚拟内存 [转载好文]

    操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系 ...

  3. (C++) C++ template笔记 -- template关键字及typename关键字

    在调用C++ template函数时,有时候语法会存在歧义. 调用函数时,使用 obj.template func<...>() 形式的语法,避免歧义: 调用类型时,使用嵌入子类型时,使用 ...

  4. freemarker if 回填CheckBox思路

    开发场景中遇到这样的一个问题,在网上也找了一些结局方法,但不成功,于是自己写了一个笨一点的方法,算是一种方法,希望对遇到该开发场景的朋友有所帮助. freemarker html代码: <tab ...

  5. Servlet面试题合集

    servlet的生命周期 在创建servlet对象时,通过调用.init()方法进行初始化 通过service()方法来接收客户端的请求.根据请求方式的不同转发给对应的doGet()或doPost() ...

  6. 【大数据课程】高途课程实践-Day02:利用Hive SQL编写离线数仓实现可视化展示

    〇.概述 1.实现内容 使用Hive SQL编程,构造分层离线数仓 并可以通过Quick Bi进行展示 2.过程 (1)数据接⼊到ODS层 (2)进⾏ODS到DWD层数据开发 (3)进⾏ODS到DIM ...

  7. 【每日一题】【栈和队列、双端队列】20. 有效的括号/NC52 有效括号序列-211127/220126

    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合. 来源:力扣(L ...

  8. Jmeter 之 jp@gc - Stepping Thread Group

    jp@gc - Stepping Thread Group 自定义线程组,根据业务需要进行设计用户增加间隔时间等 1.  下载jmeter-plugins-manager-1.3.jar插件放入lib ...

  9. 2022i春秋-冬季赛nan’s analysis

    下载附件,在tcp的0流可以看到一个keyisChunqiuGame00504 在3流处得到压缩包,密码不是上面那个,后面对附件找了几个小时都没发现压缩包密码,我是笨比.后面才看到有在线环境. 然后找 ...

  10. C++进阶(位图+布隆过滤器的概念和实现+海量数据处理)

    位图 概念 位图: 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景.通常是用来判断某个数据存不存在的. 适用场景: 如果我们需要对大量的数据进行处理,判断该数据在不在,比如40 ...