20200728-直接提取压缩包里的文件
一 使用背景:
通过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-直接提取压缩包里的文件相关推荐
- Java 无需解压直接读取ZIP压缩包里的文件及内容
最近开发的时候遇到要获取到zip压缩包里面的文件内容,一开始的想法是先通过代码执行解压,然后读取文件内容,但是感觉好麻烦,于是度了一下,发现可以无需解压直接读取,而且还是JDK提供给我们的工具. 解决 ...
- react中使用jszip获取压缩包里文件的方法、Blob与Flie之间的转换
react中jszip获取压缩包里的文件方法: // react里通过npm install jszip安装 import JSZip from 'jszip'const zip = new JSZi ...
- 如何保护压缩包里的内容不被看到?
我们把文件通过WinRAR压缩后,如果需要对内容进行保密保护,往往会设置"打开密码".但设置打开密码后,压缩包还是可以直接打开,看到里面的内容,文件名称:只有当点击打开里面的文件时 ...
- Misc-----[2021祥云杯初赛]鸣雏恋 提取压缩包文件图片名8个为一组 转ASC码base64转图片
得到一个.docx文件 目前大部分的.docx文档都是 以压缩的形式存在的 修改末尾为zip 查看 在这一步中 我之前直接把这个鸣雏恋.docx给foremost 分离了,分离后的压缩包打开后没找到 ...
- SharpZipLib 提取压缩包文件并转换为NPOI中的Excel文件
自己没有找到相关API,建个随笔记录一下 在Asp.net MVC模式下,使用CSharpZipLib读取前台上传的压缩包,然后解压,利用MemoryStream存储到内存中.再封装到Xssfwork ...
- 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 ...
- 利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件
虽说渐渐地Mac笔记本基本告别内置光驱时代了,随着网络的普及,使用到光驱的机会也渐少,但有时又难免需要光驱,比如二货出版社的随书光盘等-我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里 ...
- java -uf_Java如何快速修改Jar包里的文件内容
需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...
- 选择文件夹里指定文件图片路径_这简直是鼠标一拖,自动帮你整理好文件
本文由阿刚同学原创,首发在乐软博客(www.isharepc.com) 欢迎关注乐软博客微信公众号"阿刚同学" 在日常工作学习中,长年累月的使用硬盘中的文件必定多如牛毛,如果没有特 ...
最新文章
- h3c交换机端口加入vlan命令_华为交换机批量加入 Vlan 方法
- Nginx基于IP,端口,域名配置虚拟主机
- clickhouse官方文档_ClickHouse和他的朋友们(1)编译、开发、测试
- error: Microsoft Visual C++ 14.0 is required.(安装scrapy)
- 利用webpack和vue实现组件化
- Walking on the path of Redis --- Redis configuration
- opencv python考勤_Python基于Opencv来快速实现人脸识别过程详解(完整版)
- myeclipse 9.0安装 vss1.6.2不显示问题
- python逻辑运算符不懂_Python之逻辑运算符
- 数据结构(六) 排序
- ssh 将22端口换为其它 防火墙设置
- atomic与nonatomic的区别
- 我的创作纪念日 | 软件测试成长之路
- MIPS处理器 CPU控制信号
- 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
- ILLEGAL_ISR非法中断问题
- 浅谈自适应滤波器---(快速RLS算法)
- 高效的 Linux 限流神器Trickle
- Quartz中文文档使用
- 计蒜客幼儿园买玩具-二进制枚举子集