C# mvc中动态压缩文件发送给前端
前言
帮朋友解决一个C#中发送压缩文件的的问题,因为感觉解释起来更麻烦,就直接用几分钟时间写了个小Demo。本着"走过路过"不错过的原则,也给记录一下.
1.前端代码

非常简单的一个a标签. 顺便提一句,此处用a标签,下载文件时,当前页面并不会跳转;
如果使用ajax异步下载文件的话,因为response的原因,一般请求浏览器是会处理服务器输出的 response,例如文件下载,json串返回等,ajax请求只是个“字符性”的请求,可以读取到返回的response,但也只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。
基于以上原因,ajax下载文件,会把文件内容当作文本信息读取,而不是执行下载. 应该可以通过配置方式解决,这里就不再细说了.
2.后端代码
a.版本1:文件下载(最简方式)
public ActionResult downZip()
{
var path = Server.MapPath("~/temp/123.zip");
var name = Path.GetFileName(path);
return File(path, "application/zip", name);
}
b.版本2:压缩目录public下为所有文件为一个压缩文件,保存到临时目录,返回给前端,并删除临时文件;
public ActionResult downZip()
{
////1.
//var path = Server.MapPath("~/temp/123.zip");
//var name = Path.GetFileName(path);
//return File(path, "application/zip", name); //2.
String fileName, zipName;
byte[] bts;
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(Server.MapPath("~/public"));
fileName = Server.MapPath("~/temp/simple.zip");
zipName = Path.GetFileName(fileName);
zip.Save(fileName);
bts = System.IO.File.ReadAllBytes(fileName);
System.IO.File.Delete(fileName);
}
return File(bts, "application/zip", zipName);
}
"public"是被压缩的目录,"temp"是存放临时zip文件的地方

3.后言
这种方式,有一个最大的弊端,就是文件较大时,内存占用过高.这个地方应该再优化下. 这周如果没时间,那就下周吧,我专门来再续个优化版(ps: 如果我还记得的话...嘿嘿)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利;
本文出自:博客园--别问是谁
C# mvc中动态压缩文件发送给前端的更多相关文章
- mvc中动态给一个Model类的属性设置验证
原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这 ...
- 在mvc中动态加载菜单
最近做了一个项目, 要在客户端动态的显示菜单,也就是这些菜单是保存在数据库中的, 在客户端动态加载菜单,这样做的好处很明显,就是菜单很容易修改,直接在后台进行维护,再也不会直接在前面的 视图页面中进行 ...
- 在MVC中动态读取JSON数据创建表格
//使用getJSON // ("@Url.Action("GetAllUsers","User")" ,json文件的路径.也可以是 /M ...
- 修改.net mvc中前端验证信息的显示方式
最近一直在学习.net core的用法.想法是通过写一个新闻系统来熟悉一下这个最新的技术.其实,我以前一直对.net技术都是浅尝辄止,最主要原因是没有动力.平时写企业站因为时间原因,不是使用php的框 ...
- YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...
- MVC中的JS和CSS压缩
小说一下Js和CSS压缩的好处: 1.减小了文件的体积 2.减小了网络传输量和带宽占用 3.减小了服务器的处理的压力 4.提高了页面的渲染显示的速度 很多建议将站点的静态文件(如图片.js.css ...
- ASP.NET MVC 中CSS JS压缩合并 功能的使用方法
通过压缩合并js文件和css文件,可以减少 服务器的响应 次数和 流量,可以大大减小服务器的压力,对网站优化有比较明显的帮助!压缩合并 css 文件和js文件是网站优化的一个 比较常用的方法. ASP ...
- 在MVC应用程序中动态加载PartialView
原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载.为了演示与做好这个 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
随机推荐
- 十个书写Node.js REST API的最佳实践(下)
收录待用,修改转载已取得腾讯云授权 5. 对你的Node.js REST API进行黑盒测试 测试你的REST API最好的方法之一就是把它们当成黑盒对待. 黑盒测试是一种测试方法,通过这种方法无需知 ...
- PHP的两个科学计数法转换为字符串的方法
不常用,所以整理在这里,分享给同行使用 方法一:取尾数法 public function NumToStr($num) { if (stripos($num, 'e') === false) retu ...
- WindowProc和DefWindowProc的差别
1. WindowProc是你给自己的窗体定义的窗体处理函数 DefWindowProc是windows平台提供的默认窗体处理函数 假设某些消息你不须要做特别的处理,调用DefWindowProc进行 ...
- redis3.0.6安装配置
运行linux客户端 1 安装依赖 yum install gcc-c++ -y(安装gcc) 2 创建安装目录.编译.安装 mkdir -p /usr/local/redis(创建安 ...
- Gstreamer学习
Gstreamer学习笔记----Gstreamer架构设计思想 http://blog.csdn.net/tx3344/article/details/7497434 Gstreamer到底是个啥? ...
- tomcat中server.xml配置详解(转载)(二)
转载自:https://www.cnblogs.com/starhu/p/5599773.html 一:<Connector>元素 由Connector接口定义.<Connector ...
- Ubuntu安装Mac皮肤
如果是ubuntu的PC版,在稳定性方面的要求不是非常高,而又想换换界面养养眼,像我一般只用我的Ubuntu12.04来写写代码,娱乐娱乐的,可以试试Ubuntu的Mac皮肤. 好了,废话不多说,上图 ...
- iOS文件上传文件URL错误Invalid parameter not satisfying: fileURL'
一:iOS文件上传提示URL错误 Invalid parameter not satisfying: fileURL' 二:解决方法: NSString *imagePath = [[NSBundle ...
- Spring Boot(二)Application events and listeners
一.自定义监听器: 1.创建: META-INF/spring.factories 2.添加: org.springframework.context.ApplicationListener=com. ...
- struts 页面调用Action的指定方法并传递参数
如果为action配置了类,那么默认就会执行Action类的excute方法,Action类的写法三种: ① public class Action1 { public String execute( ...