使用SharpCompress压缩文件后把压缩的文件流传给前端
1 SharpCompress版本 0.30.1
2 应用场景:前端传递某个标识符,如Id,查询和该Id相关联的文件,并把文件压缩,最后返回给前端。适用于压缩多个体积较小的文件,如果文件体系过大,可能会消耗过多服务器内存和硬盘的资源。
具体代码如下:
// 引入命名空间
using SharpCompress.Common;
using SharpCompress.Writers;
// 文件的部分url 如localhost:8080/abc/image/agdg.jpg,这里部分url的意思是
//类似这样的“abc/image/agdg.jpg”url。变量originFileUrlList存储的信息是部分url组成的集合。这是业务决定的,具体问题具体分析。 var originFileUrlList = originFileList.Select(x => x.response.data).ToList(); // 准备拼接文件完整路径
var fileInfo = new List<FileInfo> { };
var currentDirectory = Directory.GetCurrentDirectory();
for (int i = 0; i < originFileUrlList.Count; i++)
{
originFileUrlList[i] = currentDirectory + "/TemporaryFiles" + originFileUrlList[i];
fileInfo.Add(new FileInfo(originFileUrlList[i]));
} // 临时目录 用于存放压缩产生的zip文件
var tempPath = currentDirectory + "/TemporaryFiles" + @"\压缩包.zip"; #region 解决中文字符乱码问题
// 如果文件名含有中文字符,需要指定编码以避免文件名乱码
ArchiveEncoding archiveEncoding = new ArchiveEncoding
{
Default = Encoding.GetEncoding("utf-8")
};
WriterOptions options = new WriterOptions(CompressionType.Deflate)
{
ArchiveEncoding = archiveEncoding
}; #endregion using (FileStream stream = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (var zipWriter =
WriterFactory.Open(stream, ArchiveType.Zip, options))
{
foreach (var file in fileInfo)
{
zipWriter.Write(file.Name, file);
}
} } byte[] buffer = null;
using (FileStream fileStream = System.IO.File.OpenRead(tempPath))
{
buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, buffer.Length);
} System.IO.File.Delete(tempPath);
var fileName= "压缩包" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".zip";
return File(buffer, "application/octet-stream", fileName);
3 总结:原理就是把文件压缩,之后读取压缩的文件的流,最后将流返回给前端调用者。
使用SharpCompress压缩文件后把压缩的文件流传给前端的更多相关文章
- linux批量压缩当前目录中文件后,删除原文件
linux批量压缩当前目录中文件后,删除原文件 for i in `ls|awk -F " " '{print $NF}'`; do tar -zcvf $i.tar.gz $i ...
- xmind 8 便携版:关联文件后,双击打开文件,在当前文件夹产生configuration子文件的问题解决办法
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xmind] @="XMind.Workbook.3" " ...
- 关于解压覆盖IIS文件后,新的文件不具备权限导致DMS系统无法正常运行
向DMS的服务器端站点bin目录覆盖任何补丁文件,请注意:Web站点的bin目录中的文件,IIS的服务进程(Windows2003以上,都是对应Network Services账户)必须对这些文件具 ...
- sourcetree 修改文件后提交上去,文件丢失
提交sourcetree 修改后,图片资源提交上去了,json文件没提交上去,原因是本地finder隐藏文件.gitignore_global中把一些文件类型都隐藏了不让提交. 具体使用default ...
- mfix添加文件后重新生成configure文件
mfix给了一些程序接口,大部分时候只用修改现有程序即可满足要求,这种情况不用修改configure文件,但是如果添加了新文件就需要做一些修改. 我用了Jian Cai的程序尝试了一下编译,该学者在2 ...
- ignore-on-commit svn 更改文件后 默认不提交文件到服务器(服务器上已存在的文件)
不用那个忽略文件那个,那个功能是删除服务器的文件,然后本地还存在,不符合我的要求 我的要求是 服务器文件在,我不动,然后我改完了,和别人的不冲突,我也不覆盖别人的文件 主要就是默认不提交,这个很重要 ...
- 生成CSV文件后再将CSV文件导入到mysql
1.生成CSV jar包:http://pan.baidu.com/s/1xIL26 String csvFilePath = "d:\\test.csv"; CsvWriter ...
- 【翻译】Microsoft Ajax Minifier 快速使用指南(与VS集成使用) 编译后直接压缩项目的JS或CSS文件
网上找了好久终于找到一个能跟VS集成使用的JS和CSS压缩工具,因为害怕忘记,所以给转发过来,顺便翻译一下,大学那会儿学的英语基本上都已经还给老师了,所以翻译的不太好,不过能看懂就成,对吧? 原文地址 ...
- vue -- vue-cli webpack项目打包后自动压缩成zip文件
用vue2.0开发项目,使用npm run build 命令 ,但是只会生成dist文件夹,以下是生成zip压缩包方法 1,插件安装 webpack插件安装 filemanager-webpack-p ...
- 谷歌开发的draco格式文件将obj文件压缩成drc文件后将大大减小文件大小(threejs加载有mtl文件的drc文件)
问题描述:当前threejs是92版本 但是当前版本还没有能够直接加载带贴图文件的drc格式的loader: 解决办法:先加载mtl文件将obj文件分解(按照mtl文件内材质贴图信息进行分解)再将分解 ...
随机推荐
- springboot启动日志:Multiple Spring Data modules found, entering strict repository configuration mode
问题描述 最近启动springboot项目的时候,发现有一条日志:Multiple Spring Data modules found, entering strict repository conf ...
- 其他计算机&网络&行业知识
互联网数据中心(IDC) VIDC(端口映射) CVM云服务器(Cloud Virtual Machine) IDE 集成开发环境: 开发工具 QA:Quality Assurance,直译为质 ...
- esp8266 -rtos-sdk-vscode-config
kiteconfig 工作区配置文件:hello_world.code-workspace { "folders": [ { &q ...
- 数据库管理工具navicat16.0安装
//-----------------*****本文章只做学习参考,侵权立删*****-----------------\\ 总结概要如下: 1.完成安装包下载后,点击navicat160_premi ...
- 1168 Prime Day(20)
The above picture is from Sina Weibo, showing May 23rd, 2019 as a very cool "Prime Day". T ...
- 攻防世界-fileclude
攻防世界的一道文件包含题目 include("文件名"):会将文件中的内容视为代码块接入include所在代码中,输出的只是执行后的结果,文件中的注释.定义等无法查看. 本题中可以 ...
- Attention:何为注意力机制?
本文来自公众号"AI大道理" 人类利用有限的注意力资源从大量信息中快速筛选出高价值信息,这是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效 ...
- ubuntu22.04 交叉编译openwrt
国内源vi /etc/apt/sources.listdeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted un ...
- clickhouse 重启,软连接失效,增加存储路径
1. 启动停止命令 systemctl start clickhouse-server systemctl stop clickhouse-server systemctl status clickh ...
- docker-compose 搭建 redis 集群
准备配置文件 bind 0.0.0.0 # redis端口 port ${PORT} requirepass redispwd # 关闭保护模式 protected-mode no # 开启集群 cl ...