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. 看到项目中的DateTimeFormat和JsonFormat就头大

    刚来这家公司的时候, 发现很多同事还在用这种方式写代码 当时以为是偶然, 刚才在群里发现还有好多人在交流应当加哪些注解, 声明时区问题. 当写一个东西感到麻烦的时候, 那么大概率是有低成本的更优解的 ...

  2. 小程序嵌套h5webview.特定时间跳转小程序页面.调起e证通的人脸核身.成功了返回webview.

    e证通链接. https://cloud.tencent.com/document/product/1007/56643#3.2-.E5.AE.89.E8.A3.85-sdk

  3. Wordpress 漏洞利用与后渗透

    [作业]ColddBox 靶场 Wordpress 漏洞利用与后渗透. 突破口 渗透这类 CMS 网站时,不要上来就狂扫,它大部分目录都是固定的,开源去看对应版本,商业的找几篇文章.特别 注意的是一定 ...

  4. mybatis原理探究

    jdbc数据库运行流程: JDBC有哪三种statement接口: Statement 1.Statement接口提供了执行语句和获取结果的基本方法: 2.Statement继承自Wrapper:3. ...

  5. 2363. 合并相似的物品 (Easy)

    问题描述 2363. 合并相似的物品 (Easy) 给你两个二维整数数组 items1 和 items2 ,表示两个物品集合.每个数组 items 有以下特质: items[i] = [valueᵢ, ...

  6. docker容器生命周期管理

    查看容器版本 docker version [root@node1 ~]# docker version Client: Docker Engine - Community Version: 20.1 ...

  7. Mysql数据库基础第二章:(十)联合查询

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  8. mysql实训

    MYSQL You have an error in your SQL syntax; check the manual that corresponds to your MySQL server v ...

  9. FIFO 串口接收处理机制

    与安富莱电子的串口处理机制做对比交互 参考链接: https://www.eet-china.com/mp/a161019.html

  10. js生成快速生成0~n的数组

    Object.keys(Array.from(Array(100)))