zoukankan      html  css  js  c++  java
  • 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: 如果我还记得的话...嘿嘿)

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利;

    本文出自:博客园--别问是谁

  • 相关阅读:
    算法竞赛入门经典第一章习题解答
    程序实现求int类型和double类型的最大最小值范围
    程序实现求int类型和double类型的最大最小值范围
    程序实现求int类型和double类型的最大最小值范围
    程序实现求int类型和double类型的最大最小值范围
    机器狗组装费用 南邮NOJ 1076 优先权队列
    【HDOJ】2604 Queuing
    【HDOJ】1208 Pascal's Travels
    【HDOJ】4857 逃生
    【HDOJ】2510 符号三角形
  • 原文地址:https://www.cnblogs.com/Andrew-XinFei/p/6233978.html
Copyright © 2011-2022 走看看