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压缩文件后把压缩的文件流传给前端的更多相关文章

  1. linux批量压缩当前目录中文件后,删除原文件

    linux批量压缩当前目录中文件后,删除原文件 for i in `ls|awk -F " " '{print $NF}'`; do tar -zcvf $i.tar.gz $i ...

  2. xmind 8 便携版:关联文件后,双击打开文件,在当前文件夹产生configuration子文件的问题解决办法

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xmind] @="XMind.Workbook.3" " ...

  3. 关于解压覆盖IIS文件后,新的文件不具备权限导致DMS系统无法正常运行

     向DMS的服务器端站点bin目录覆盖任何补丁文件,请注意:Web站点的bin目录中的文件,IIS的服务进程(Windows2003以上,都是对应Network Services账户)必须对这些文件具 ...

  4. sourcetree 修改文件后提交上去,文件丢失

    提交sourcetree 修改后,图片资源提交上去了,json文件没提交上去,原因是本地finder隐藏文件.gitignore_global中把一些文件类型都隐藏了不让提交. 具体使用default ...

  5. mfix添加文件后重新生成configure文件

    mfix给了一些程序接口,大部分时候只用修改现有程序即可满足要求,这种情况不用修改configure文件,但是如果添加了新文件就需要做一些修改. 我用了Jian Cai的程序尝试了一下编译,该学者在2 ...

  6. ignore-on-commit svn 更改文件后 默认不提交文件到服务器(服务器上已存在的文件)

    不用那个忽略文件那个,那个功能是删除服务器的文件,然后本地还存在,不符合我的要求 我的要求是 服务器文件在,我不动,然后我改完了,和别人的不冲突,我也不覆盖别人的文件 主要就是默认不提交,这个很重要 ...

  7. 生成CSV文件后再将CSV文件导入到mysql

    1.生成CSV jar包:http://pan.baidu.com/s/1xIL26 String csvFilePath = "d:\\test.csv"; CsvWriter ...

  8. 【翻译】Microsoft Ajax Minifier 快速使用指南(与VS集成使用) 编译后直接压缩项目的JS或CSS文件

    网上找了好久终于找到一个能跟VS集成使用的JS和CSS压缩工具,因为害怕忘记,所以给转发过来,顺便翻译一下,大学那会儿学的英语基本上都已经还给老师了,所以翻译的不太好,不过能看懂就成,对吧? 原文地址 ...

  9. vue -- vue-cli webpack项目打包后自动压缩成zip文件

    用vue2.0开发项目,使用npm run build 命令 ,但是只会生成dist文件夹,以下是生成zip压缩包方法 1,插件安装 webpack插件安装 filemanager-webpack-p ...

  10. 谷歌开发的draco格式文件将obj文件压缩成drc文件后将大大减小文件大小(threejs加载有mtl文件的drc文件)

    问题描述:当前threejs是92版本 但是当前版本还没有能够直接加载带贴图文件的drc格式的loader: 解决办法:先加载mtl文件将obj文件分解(按照mtl文件内材质贴图信息进行分解)再将分解 ...

随机推荐

  1. MyBatisPlus 报MP_OPTLOCK_VERSION_ORIGINAL not found. Available parameters are错误

    配置mybatisplus乐观锁的过程 1.在数据库表中添加version字段类型int 2.在实体类中增加version属性,属性上增加@Version注解 3.配置乐观锁插件 @Configura ...

  2. CTF Show web入门 1——20(信息收集)wp和一些感想

    web1 信息搜集 此题为 [从0开始学web]系列第一题 此系列题目从最基础开始,题目遵循循序渐进的原则 希望对学习CTF WEB的同学有所帮助. 开发注释未及时删除 此题有以上备注,可以想到备注未 ...

  3. 从零搭建hadoop集群之系统管理操作

    1. 配置主机名 [root@hadoop01 ~]# hostname #显示当前主机名 方法一:通过配置文件/etc/hostname (重启后生效) [root@hadoop01 ~]# vim ...

  4. Android移动端性能测试工具mobileperf

    简介:mobileperf是阿里开源的一个python PC 工具,可以收集Android性能数据: cpu.内存.流畅度.fps.logcat日志.流量.进程线程数.进程启动日志,mobileper ...

  5. Hyper-V虚拟机在Win2019server中共用一个公网IP

    Hyper-V虚拟机在Win2019server中共用一个公网IP 有时生产环境中希望一台宿主机上的多台虚拟机共用一个IP出口,按以下操作处理即可. 环境: Windows 2019 server D ...

  6. jabc连接数据库

    Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法.JD ...

  7. 配置全局路由表和VRF路由表之间的路由泄漏

    1.拓扑图 2.R1配置 R1#sho run Building configuration... Current configuration : 1360 bytes ! upgrade fpd a ...

  8. sudo apt update 没有 Release 文件

    注: 不同环境出错原因可能不同,本文仅供参考. 今天在Ubuntu 19.04 系统运行指令 sudo apt update 时,忽然提示错误,报错如下: 404 Not Found [IP: 101 ...

  9. 【Ubuntu】设置桌面文件夹路径

    Ubuntu 系统会将桌面文件夹路径默认设置为 $HOME/Desktop,包括文档.下载.图片等文件夹路径都有各自的默认路径.若想更改这些文件夹路径,可参考『此链接』. 首先到希望更改的路径下建立桌 ...

  10. vue super flow 多种形状

    1 <template> 2 <v-container class="workflow-container" grid-list-xl fluid> 3 & ...