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 > ) // get all files path
{
for (int i = ; 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 > )
{
MemoryStream ms = new MemoryStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(ms);
zipOutputStream.SetLevel(intZipLevel);
zipOutputStream.Password = strPassword; for (int i = ; 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();
}
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, , buffer.Length); string strFileName = strFile.Replace(strZipTopDirectoryPath, "");
if (strFileName.StartsWith(""))
{
strFileName = strFileName.Substring();
}
ZipEntry entry = new ZipEntry(strFileName);
entry.DateTime = DateTime.Now;
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Write(buffer, , 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 = ; i < files.Length; i++)
{
AllFilesPath.Add(files[i]);
}
string[] directorys = Directory.GetDirectories(strParentDirectoryPath);
for (int i = ; i < directorys.Length; i++)
{
GetDirectoryFiles(directorys[i], AllFilesPath);
}
if (files.Length == && directorys.Length == ) //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 > ? item.Split('=')[] : "")
.Select(value => value.TryLong()).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, , );
rqBtimap.Save(dir + "/" + productItem.ProductId + "-" + skuItem.SkuId + "-" + skuItem.SkuName + ".jpg"); }
} var strZipTopDirectoryPath = Server.MapPath("~/");
const int intZipLevel = ;
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 = ;
result.Item2.Read(buffer, , 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 + "¶m" + i + "=" + selectedList[i].toString());
}
location.href = url;
});
asp.net mvc 文件压缩下载的更多相关文章
- ASP.NET MVC 文件上传和路径处理
ASP.NET MVC 文件上传和路径处理总结 目录 文件的上传和路径处理必须解决下面列出的实际问题: 1.重复文件处理 2.单独文件上传 3.编辑器中文件上传 4.处理文章中的图片路径 5.处理上传 ...
- ASP.NET MVC文件上传【转】
最近用到了文件上传功能,下面给出ASP.NET MVC文件上传的一个简单示例: 一.前端代码 @using (Html.BeginForm("UploadFile", " ...
- 实现asp.net的文件压缩、解压、下载
很早前就想做文件的解压.压缩.下载 了,不过一直没时间,现在项目做完了,今天弄了下.不过解压,压缩的方法还是看的网上的,嘻嘻~~不过我把它们综合了一下哦.呵呵~~ 1.先要从网上下载一个icsharp ...
- asp.net mvc 上传下载文件的几种方式
view: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...
- php多文件压缩下载
/*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...
- Java 多个文件压缩下载
有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...
- mvc 文件压缩 减少文件大小
using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; usin ...
- ASP.NET Core文件压缩最佳实践
前言 在微软官方文档中,未明确指出文件压缩功能的使用误区. 本文将对 ASP.NET Core 文件响应压缩的常见使用误区做出说明. 误区1:未使用 Brotil 压缩 几乎不需要任何额外的代价,Br ...
- asp.net mvc + javascript生成下载文件
近期做的是对现有项目进行重构.WEB FROM改成MVC,其实也算是推倒重来了. 里面有一个导出功能,将数据输出成txt文件,供下载.原先的做法是有一个隐藏的iframe,在这个iframe的页面中设 ...
随机推荐
- HttpHandler 实现文件下载
一个浏览者发出的请求都是由实现了IHttpHandler接口的对象进行响应,由于下次访问不一定还是上次那个对象进行响应,上次响应完毕对象可能已经被销毁了,写的类变量值早就不存在了,因此不将状态信息保存 ...
- Qt 学习之路 2(84):Repeater
前面的章节我 们介绍过模型视图.这是一种数据和显示相分离的技术,在 Qt 中有着非常重要的地位.在 QtQuick 中,数据和显示的分离同样也是利用这种"模型-视图"技术实现的.对 ...
- 打开另外一个App
/** * 打开一个app * * @param packageName * @param data * @return */ public static boolean lanuchApp(Cont ...
- Augular JS里的各种ng
Augular JS里的各种ng- 正文: 1.ng-disabled="一种状态:该状态下不可用"例如: %button.btn.btn-2(ng-disabled=" ...
- Error configuring application listener of class 报错 解决
Error configuring application listener of class 次错误是由于工程没有贬义Class文件造成的,clean一下编译一下工程,clean之后进入项目目录查看 ...
- List<string[]> 如何去重
List<string[]> 如何去重,代码如下: static void Main(string[] args) { List<string[]> list = new Li ...
- 【dp】 poj 1157
不错的dp入门题 画出dp矩阵 每个dp[i][j]是由“其上”的状态或是“其左上”的状态转化而来,那我们选对角线和上边进行三角dp推导 #include<stdio.h> #incl ...
- servlet & javabean
1.servelet 什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③这个在服务器端运行,用以处理客户端的请求 Servlet相关包的 ...
- IO包中的其他类
查看各对象API文档 打印流 PrintWriter PrintStream 序列流:对多个流进行排列合并 SequenceInputStream public static void main(St ...
- merge 语句的语法
/*Merge into 详细介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询, 连接条 ...