zoukankan      html  css  js  c++  java
  • 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;
        });
  • 相关阅读:
    VisualSVN-Server windows 版安装时报错 "Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details."
    Pytest 单元测试框架之初始化和清除环境
    Pytest 单元测试框架入门
    Python(email 邮件收发)
    Python(minidom 模块)
    Python(csv 模块)
    禅道简介
    2020年最好的WooCommerce主题
    Shopify网上开店教程(2020版)
    WooCommerce VS Magento 2020:哪个跨境电商自建站软件更好?
  • 原文地址:https://www.cnblogs.com/hellolong/p/4236275.html
Copyright © 2011-2022 走看看