首页 > 代码库 > asp.net mvc 文件压缩下载

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;    });

 

asp.net mvc 文件压缩下载