• asp.net mvc 文件压缩下载


    压缩文件相关的类:

        public class ZIPCompressUtil
        {
            public static Tuple<bool, Stream> Zip(string strZipTopDirectoryPath, int intZipLevel, string strPassword, string[] filesOrDirectoriesPaths)
            {
                try
                {
                    List<string> AllFilesPath = new List<string>();
                    if (filesOrDirectoriesPaths.Length > 0) // get all files path
                    {
                        for (int i = 0; i < filesOrDirectoriesPaths.Length; i++)
                        {
                            if (File.Exists(filesOrDirectoriesPaths[i]))
                            {
                                AllFilesPath.Add(filesOrDirectoriesPaths[i]);
                            }
                            else if (Directory.Exists(filesOrDirectoriesPaths[i]))
                            {
                                GetDirectoryFiles(filesOrDirectoriesPaths[i], AllFilesPath);
                            }
                        }
                    }
    
                    if (AllFilesPath.Count > 0)
                    {
                        MemoryStream ms = new MemoryStream();
                        ZipOutputStream zipOutputStream = new ZipOutputStream(ms);
                        zipOutputStream.SetLevel(intZipLevel);
                        zipOutputStream.Password = strPassword;
    
                        for (int i = 0; i < AllFilesPath.Count; i++)
                        {
                            string strFile = AllFilesPath[i];
                            try
                            {
                                if (Directory.Exists(strFile)) //folder
                                {
                                    string strFileName = strFile.Replace(strZipTopDirectoryPath, "");
                                    if (strFileName.StartsWith(""))
                                    {
                                        strFileName = strFileName.Substring(0);
                                    }
                                    ZipEntry entry = new ZipEntry(strFileName + "/");
                                    entry.DateTime = DateTime.Now;
                                    zipOutputStream.PutNextEntry(entry);
                                }
                                else //file
                                {
                                    FileStream fs = File.OpenRead(strFile);
    
                                    byte[] buffer = new byte[fs.Length];
                                    fs.Read(buffer, 0, buffer.Length);
    
                                    string strFileName = strFile.Replace(strZipTopDirectoryPath, "");
                                    if (strFileName.StartsWith(""))
                                    {
                                        strFileName = strFileName.Substring(0);
                                    }
                                    ZipEntry entry = new ZipEntry(strFileName);
                                    entry.DateTime = DateTime.Now;
                                    zipOutputStream.PutNextEntry(entry);
                                    zipOutputStream.Write(buffer, 0, buffer.Length);
    
                                    fs.Close();
                                    fs.Dispose();
                                }
                            }
                            catch
                            {
                                continue;
                            }
                        }
    
                        zipOutputStream.Finish();
                        return new Tuple<bool, Stream>(true, ms);
                    }
                    else
                    {
                        return new Tuple<bool, Stream>(false, null);
                    }
                }
                catch
                {
                    return new Tuple<bool, Stream>(false, null);
                }
            }
    
            private static void GetDirectoryFiles(string strParentDirectoryPath, List<string> AllFilesPath)
            {
                string[] files = Directory.GetFiles(strParentDirectoryPath);
                for (int i = 0; i < files.Length; i++)
                {
                    AllFilesPath.Add(files[i]);
                }
                string[] directorys = Directory.GetDirectories(strParentDirectoryPath);
                for (int i = 0; i < directorys.Length; i++)
                {
                    GetDirectoryFiles(directorys[i], AllFilesPath);
                }
                if (files.Length == 0 && directorys.Length == 0) //empty folder
                {
                    AllFilesPath.Add(strParentDirectoryPath);
                }
            }
        }

    调用并提供下载的方法

            public ActionResult Export()
            {
                List<long> productIds = null;
                var url = Request.RawUrl;
                if (url.Contains("?"))
                {
                    string paramStr = url.Substring(url.LastIndexOf("?"));
                    string[] paramArray = paramStr.Split('&');
                    productIds = paramArray
                        .Select(item => item.Split('=').Length > 1 ? item.Split('=')[1] : "0")
                        .Select(value => value.TryLong(0)).ToList();
                }
    
                if (Directory.Exists(Server.MapPath("~/上架商品")))
                {
                    Directory.Delete(Server.MapPath("~/上架商品"), true);
                }
    
                var productlist = ProductOnSaleService.Instance.GetProductSkuImgsExportList(productIds);
                foreach (var productItem in productlist)
                {
                    var dir = Server.MapPath("~/上架商品/") + productItem.ProductId + "-" + productItem.LongName;
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                    foreach (var skuItem in productItem.Skus)
                    { 
                        Bitmap rqBtimap = QrCodeHelper.Encode(BizKeyValService.Instance.Get(EnumBizKey.ProductShareUrl).BizVal
                            + "?id=" + productItem.ProductId + "&skuid=" + skuItem.SkuId, 430, 430);
                        rqBtimap.Save(dir + "/" + productItem.ProductId + "-" + skuItem.SkuId + "-" + skuItem.SkuName + ".jpg");
                        
                    }
                }
    
                var strZipTopDirectoryPath = Server.MapPath("~/");
                const int intZipLevel = 6;
                const string strPassword = "";
                var filesOrDirectoriesPaths = new string[] { Server.MapPath("~/上架商品") };
                var result = ZIPCompressUtil.Zip(strZipTopDirectoryPath, intZipLevel, strPassword, filesOrDirectoriesPaths);
                var buffer = new byte[result.Item2.Length];
                result.Item2.Position = 0;
                result.Item2.Read(buffer, 0, buffer.Length);
                result.Item2.Close();
                Response.AppendHeader("content-disposition", "attachment;filename=上架商品.zip");
                Response.BinaryWrite(buffer);
                Response.Flush();
                Response.End();
                return new EmptyResult();
            }

    js代码

    $("#btnExpress").click(function () {
            var selectedList = $.getSelectId(true);
            if (selectedList.length == 0) {
                $.alert("请选择商品");
                return;
            }
            var url = "/Product/ProductOnSale/Export";
            for (var i = 0; i < selectedList.length; i++) {
                url = (i == 0 ? url + "?param" + i + "=" + selectedList[i].toString() 
                    : url + "&param" + i + "=" + selectedList[i].toString());
            }
            location.href = url;
        });
  • 相关阅读:
    python爬虫学习
    Java基础知识11--Optional类
    07 Windows访问远程共享文件夹---利用\IP地址
    Springcloud 学习笔记15-打开postman console控制台,查看接口测试打印log日志信息
    Springcloud 学习笔记14-IaaS, PaaS和SaaS的区别
    Springcloud 学习笔记13-使用PostMan上传/下载文件,前后端联合测试
    Java基础知识10--Stream API详解02
    Java基础知识09--Stream API详解01
    洛谷 P2587 [ZJOI2008]泡泡堂(贪心)
    洛谷 P3199 [HNOI2009]最小圈(01分数规划,spfa判负环)
  • 原文地址:https://www.cnblogs.com/hellolong/p/4236275.html
Copyright © 2020-2023  润新知