使用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文件内材质贴图信息进行分解)再将分解 ...
随机推荐
- Delphi 新语法:泛型
这里的新语法一般指Delphi7不支持的语法,高版本中会经常遇到,所以花一点时间学会使用它.泛型是一种特殊的类型.你不用一开始就指明参数的具体类型,而是先定义一个类型变量,在使用的时候再确定参数的 ...
- Jenkins+maven+gitlab+harbor+Rancher
- EBS的配置文件
默认账套 select fnd_profile.value('GL_SET_OF_BKS_ID') FROM DUAL; >> 2026 这样就能通过2026去获取一些账套上的配置 比如c ...
- 查询正在执行的SQL的数据库名和表名
创建限制0.5个CPU和0.5G内存的MySQL容器 docker run -itd --name mysql --cpu-quota=50000 --memory 512M --rm -p 3306 ...
- Win10系统所有文件夹被设为只读,取消之后再次打开属性依然只读,怎么解决?
安装完Nodejs之后发现npm info vue指令没有权限运行: C:\Users\JC>npm info vue npm ERR! code EPERM npm ERR! syscall ...
- RepOpt-VGG:梯度参数化的开创
本文来自公众号"AI大道理" YOLov6的量化问题: yolov6在结构中大量使用了重参数结构,导致数据分布过差,PTQ精度急剧下降.另外,重参数化结构网络无法直接使用Q ...
- Prometheus API说明
本文来自Prometheus官网手册 和 Prometheus简介,https://www.cnblogs.com/zhoujinyi/p/11955131.html HTTP API 在Promet ...
- 真实世界的算法_pdf
链接:https://pan.baidu.com/s/1OZiDnd2My3FvGIuwO91E7Q 提取码:t88i
- android cannot generate view binders android.databinding.tool.util.LoggedErrorException
错误: Cannot resolve type 'viewModel'错误: cannot generate view binders android.databinding.tool.util.Lo ...
- Perl报错you may need to install the Win32::Console module(转)
ActivePerl-5.26.3.XXXX.msi安装后,命令行执行cpan,会出现如下提示而无法继续. Can't locate Win32/Console.pm in @INC (you may ...