zoukankan      html  css  js  c++  java
  • MVC 图片添加到压缩包导出

    1、引用ICSharpCode.SharpZipLib 这个DLL 、(QRCoder我这里导出的是二维码图片,我多加了一个dll,这些DLL都可以在NuGet包里面下载的)

     1  /// <summary>
     2         /// 压缩打包文件 导出
     3         /// </summary>
     4         public ActionResult ZipFileByCode(string Door_Autoid)
     5         {
     6             //条件不满足时返回的信息
     7             if (条件)
     8             {
     9                 Response.Write("<script>alert('返回提示信息!');opener=null;self.close();</script>");
    10                 Response.End();
    11                 return new EmptyResult();
    12             }
    13             //此处是拿到数据,不用管,每个人获取数据方式都不一样
    14             List<DoorInfo> Doors = 获取数据;
    15             List<string> Autoids = Door_Autoid.Split(',').ToList();
    16            
    17             //保存导出路径  添加压缩包的时候
    18             List<string> savePaths = new List<string>();
    19             //保存二维码图片
    20             foreach (DoorInfo item in Doors)
    21             {
    22 
    23                 // 生成二维码的内容
    24                 string strCode = item.URL; 
    25                 QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
    26                 QRCodeData qrCodeData = qrGenerator.CreateQrCode(strCode, QRCodeGenerator.ECCLevel.Q);
    27                 QRCode qrcode = new QRCode(qrCodeData);
    28 
    29                 // qrcode.GetGraphic 方法可参考最下发“补充说明”
    30                 Bitmap qrCodeImage = qrcode.GetGraphic(10, Color.Black, Color.White, null, 15, 6, false);
    31                 //Bitmap qrCodeImage = qrcode.GetGraphic(5, Color.White, Color.Black, null, 15, 6, false);
    32                 string tempname = item.Door_Code + "_" + item.Door_Name;
    33                 string filname = tempname.Length > 100 ? tempname.Substring(0, 100) + "..." : tempname;
    34                 string path = AppDomain.CurrentDomain.BaseDirectory;
    35                 string fileFullPath = AppDomain.CurrentDomain.BaseDirectory + "Content\TempImages\" + filname + ".png";
    36                 //创建文件夹
    37                 string temppath = path + "Content\TempImages\";
    38                 if (!Directory.Exists(temppath))
    39                     Directory.CreateDirectory(temppath);
    40 
    41                 if (System.IO.File.Exists(fileFullPath))
    42                 {
    43                     // 3.2、删除文件
    44                     System.IO.File.Delete(fileFullPath);
    45                 }
    46                 qrCodeImage.Save(fileFullPath, ImageFormat.Png);
    47 
    48                 savePaths.Add("/Content/TempImages/" + filname + ".png");
    49             }
    50 
    51             //文件名乱码解决
    52             Encoding gbk = Encoding.GetEncoding("gbk");
    53             ZipConstants.DefaultCodePage = gbk.CodePage;
    54             //添加压缩 导出二维码
    55             MemoryStream ms = new MemoryStream();
    56             byte[] buffer = null;
    57 
    58             using (ZipFile file = ZipFile.Create(ms))
    59             {
    60                 file.BeginUpdate();
    61 //这个我写的当前的Controller名
    62                 file.NameTransform = new DoorInfoController();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
    63 
    64                 foreach (var item in savePaths)
    65                 {
    66                     file.Add(Server.MapPath(item));
    67                 }
    68 
    69                 file.CommitUpdate();
    70 
    71                 buffer = new byte[ms.Length];
    72                 ms.Position = 0;
    73                 ms.Read(buffer, 0, buffer.Length);
    74             }
    75 //这里可以改动导出压缩包的名称filename
    76             Response.AddHeader("content-disposition", "attachment;filename=QRCodeImages.zip");
    77             Response.BinaryWrite(buffer);
    78             Response.Flush();
    79             Response.End();
    80 
    81             return new EmptyResult();
    82         }
    View Code

    注:如果是只想导出图片的话,只需要自己拿到List<图片地址>的集合,然后传到savePaths导出路径集合,用下面的代码就行了

  • 相关阅读:
    multipath路径残留导致虚拟机无法重启
    multipath配置错误导致的云平台虚拟机挂载云硬盘失败
    kubernetes v1.8.3安装coredns
    helm安装chart----percona-xtradb-cluster实践记录
    elasticsearch性能调优相关
    nova hypervisor-list无法执行,其他api均正常
    珍爱面经
    猫眼面经
    头条面经
    阿里秋招面经
  • 原文地址:https://www.cnblogs.com/MycnBlogs7854/p/10455166.html
Copyright © 2011-2022 走看看