一 使用背景:

通过Http 请求下载一个压缩的文件到服务器内存中(重点:不用保存到本地),然后通过代码直接提取压缩包的文件

二 实现思路:(注:需要提前安装 ICSharpCode.SharpZipLib.dll)

1 通过Http请求下载压缩文件到服务器的内存中

2 读取内存中压缩的包的流(注意先将:Stream 转换成MemoryStream)

3 通过ICSharpCode.SharpZipLib.Zip.dll的ZipFile方法将压缩包的MemoryStream 注入

4 通过文件索引vb.net教程提取压缩包里的文件c#教程流

5 保存上传文件到指定位置

三 参考代码:

 1         public string HttpDownloadFile(int tenantId, RequestHeaadModel heaadModel)2         {3             var dfsResultPath = string.Empty;4             var listDfsPath = new List<string>();5             try6             {7                 #region Http请求参数设置8                 ServicePointManager.Expect100Continue = false;9                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
10                 ServicePointManager.ServerCertificateValidationCallback += (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true;
11                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(heaadModel.ResquestParamUrl);
12                 request.Headers.Add("x-qys-accesstoken", heaadModel.Accesstoken);
13                 request.Headers.Add("x-qys-timestamp", "0");
14                 request.Headers.Add("x-qys-signature", heaadModel.Searect);
15                 request.ContentType = heaadModel.ContentType;
16                 request.Method = "GET";
17                 request.Timeout = 100000;
18                 request.Accept = "application/octet-stream";
19                 #endregion
20
21                 #region 对响应的压缩包解析
22                 using (WebResponse webRes = request.GetResponse())
23                 {24                     #region  1 获取响应的压缩包文件流
25                     var length = (long)webRes.ContentLength;
26                     var response = webRes as HttpWebResponse;
27                     var stream = response.GetResponseStream();
28                     #endregion
29
30                     #region 2   将压缩包文件流程读取到内存中
31                     var stmMemory = new MemoryStream();
32                     if (length == -1)
33                     {34                         length = 1024;
35                     }
36                     var buffer = new byte[length];
37                     int i;
38                     while ((i = stream.Read(buffer, 0, buffer.Length)) > 0)
39                     {40                         stmMemory.Write(buffer, 0, i);
41                     }
42                     #endregion
43
44                     #region 3 循环读取压缩包的文件
45                     var zipFile_ = new ICSharpCode.SharpZipLib.Zip.ZipFile(stmMemory);
46                     int count = int.Parse(zipFile_.Count.ToString());//获取文件个数
47                     for (int j = 0; j < count; j++)
48                     {49                         var tempSteam = zipFile_.GetInputStream(long.Parse($"{i}"));//压缩包里的文件索引
50                         var stmMemory2 = new MemoryStream();
51                         var buffer2 = new byte[zipFile_[i].Size];
52                         int m;
53                         //将单个文件的文件流读取到内存中
54                         while ((m = tempSteam.Read(buffer2, 0, buffer2.Length)) > 0)
55                         {56                             stmMemory2.Write(buffer2, 0, m);
57                         }
58                         stmMemory2.Seek(0, SeekOrigin.Begin);
59                         var dfsItem = new DfsItem("TenantBaseFile", zipFile_[i].Name,
60                             stmMemory2, tenantId);
61                         var dfsPath = Dfs.Store(dfsItem);
62
63                         Logger.Debug($"下载背调文件地址:{dfsPath.ToString()}");
64                         listDfsPath.Add(dfsPath.ToString());
65                         stmMemory2.Close();
66                         stmMemory2.Flush();
67                     }
68                     #endregion
69                     stmMemory.Close();
70                     stmMemory.Flush();
71                 }
72                 #endregion
73             }
74             catch (Exception ex)
75             {76                 Logger.Debug($"下载报告异常:异常信息:{ex.Message},堆栈信息:{ex.StackTrace}");
77             }
78
79             return string.Join(",", listDfsPath);
80         }

怕你知道,又怕你不知道,怕你知道却又假装不知道!

20200728-直接提取压缩包里的文件相关推荐

  1. Java 无需解压直接读取ZIP压缩包里的文件及内容

    最近开发的时候遇到要获取到zip压缩包里面的文件内容,一开始的想法是先通过代码执行解压,然后读取文件内容,但是感觉好麻烦,于是度了一下,发现可以无需解压直接读取,而且还是JDK提供给我们的工具. 解决 ...

  2. react中使用jszip获取压缩包里文件的方法、Blob与Flie之间的转换

    react中jszip获取压缩包里的文件方法: // react里通过npm install jszip安装 import JSZip from 'jszip'const zip = new JSZi ...

  3. 如何保护压缩包里的内容不被看到?

    我们把文件通过WinRAR压缩后,如果需要对内容进行保密保护,往往会设置"打开密码".但设置打开密码后,压缩包还是可以直接打开,看到里面的内容,文件名称:只有当点击打开里面的文件时 ...

  4. Misc-----[2021祥云杯初赛]鸣雏恋 提取压缩包文件图片名8个为一组 转ASC码base64转图片

    得到一个.docx文件 目前大部分的.docx文档都是 以压缩的形式存在的 修改末尾为zip 查看 在这一步中 我之前直接把这个鸣雏恋.docx给foremost 分离了,分离后的压缩包打开后没找到 ...

  5. SharpZipLib 提取压缩包文件并转换为NPOI中的Excel文件

    自己没有找到相关API,建个随笔记录一下 在Asp.net MVC模式下,使用CSharpZipLib读取前台上传的压缩包,然后解压,利用MemoryStream存储到内存中.再封装到Xssfwork ...

  6. linux把文件复制到压缩包里,Linux学习笔记(二十)文件压缩 zip压缩、tar打包、打包、解包...

    一.zip压缩 首先安装zip与unzip yum install -y zip/unzip zip 1.txt.zip 1.txt 压缩文件1.txt,压缩文件名称为1.txt.zip zip -r ...

  7. 利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件

    虽说渐渐地Mac笔记本基本告别内置光驱时代了,随着网络的普及,使用到光驱的机会也渐少,但有时又难免需要光驱,比如二货出版社的随书光盘等-我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里 ...

  8. java -uf_Java如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  9. 选择文件夹里指定文件图片路径_这简直是鼠标一拖,自动帮你整理好文件

    本文由阿刚同学原创,首发在乐软博客(www.isharepc.com) 欢迎关注乐软博客微信公众号"阿刚同学" 在日常工作学习中,长年累月的使用硬盘中的文件必定多如牛毛,如果没有特 ...

最新文章

  1. h3c交换机端口加入vlan命令_华为交换机批量加入 Vlan 方法
  2. Nginx基于IP,端口,域名配置虚拟主机
  3. clickhouse官方文档_ClickHouse和他的朋友们(1)编译、开发、测试
  4. error: Microsoft Visual C++ 14.0 is required.(安装scrapy)
  5. 利用webpack和vue实现组件化
  6. Walking on the path of Redis --- Redis configuration
  7. opencv python考勤_Python基于Opencv来快速实现人脸识别过程详解(完整版)
  8. myeclipse 9.0安装 vss1.6.2不显示问题
  9. python逻辑运算符不懂_Python之逻辑运算符
  10. 数据结构(六) 排序
  11. ssh 将22端口换为其它 防火墙设置
  12. atomic与nonatomic的区别
  13. 我的创作纪念日 | 软件测试成长之路
  14. MIPS处理器 CPU控制信号
  15. 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
  16. ILLEGAL_ISR非法中断问题
  17. 浅谈自适应滤波器---(快速RLS算法)
  18. 高效的 Linux 限流神器Trickle
  19. Quartz中文文档使用
  20. 计蒜客幼儿园买玩具-二进制枚举子集

热门文章

  1. C++实现顺序表基本操作
  2. Romberg算法(C语言实现)
  3. 忘记电脑登录密码怎么办?不用U盘不用做PE系统,修改电脑登录密码。
  4. Python3.4 用 BeautifulSoup 爬虫 Navigable String类型转换
  5. 公路平竖曲线放样、坐标反算桩号GL.3-25PHF程序fx-5800p
  6. 最近很火的 ClickHouse【列式数据库】 是什么?
  7. 行式数据库 和 列式数据库
  8. woe分析_机器学习-谈谈逻辑回归里面的woe化-20170911
  9. 【小程序】微信小程序使用腾讯云IM(一):登录
  10. Docker的安全和日志管理