.net 批量导出文件,以ZIP压缩方式导出
1. 首先Nuget ICSharpCode.SharpZipLib
<script type="text/javascript">
$(function () {
$("#OutPutLink").click(function () { // 单击下文件时
$.ajax({ // 先判断条件时间内没有文件
url: "/Home/ExistsFile?statTime=" + $("#statTime").val() + "&endTime=" + $("#endTime").val(),
type: "Get",
success: function (data) {
if (data == "Exists") { // 如果有 就下载
window.location.href = "/Home/OutputFile?statTime=" + $("#statTime").val() + "&endTime=" + $("#endTime").val();
}
else
alert("该时间区域内无文件");
}
});
});
});
</script>
/// <summary>
/// 验证该时间段是否有文件
/// </summary>
/// <param name="statTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns></returns>
public string ExistsFile(DateTime statTime, DateTime endTime)
{
DateTime sTime = DateTime.Parse(statTime.ToString("yyyy-MM-dd") + " 00:00:00");
DateTime eTime = DateTime.Parse(endTime.ToString("yyyy-MM-dd") + " 23:59:59");
DirectoryInfo TheFolder = new DirectoryInfo(Server.MapPath("~/Content/ExcelFile"));
//遍历文件夹下的文件
List<string> listFJName = new List<string>();//保存附件名字
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
string fileType = Path.GetExtension(NextFile.FullName).ToString().ToLower();
if (fileType == ".xls" || fileType == ".xlsx")
{
string fileDate = NextFile.Name.Substring(, );
DateTime dtime = DateTime.ParseExact(fileDate, "yyyyMMdd", null);
if (dtime >= sTime && dtime <= eTime)
{
listFJName.Add(NextFile.Name);
}
}
}
if (listFJName.Count > )
return "Exists";
return "NotExists";
} /// <summary>
/// 执行将文件压缩下载
/// </summary>
/// <param name="statTime"></param>
/// <param name="endTime"></param>
public void OutputFile(DateTime statTime,DateTime endTime)
{
DateTime sTime = DateTime.Parse(statTime.ToString("yyyy-MM-dd") + " 00:00:00");
DateTime eTime = DateTime.Parse(endTime.ToString("yyyy-MM-dd") + " 23:59:59");
DirectoryInfo TheFolder = new DirectoryInfo(Server.MapPath("~/Content/ExcelFile"));
//遍历文件夹下的文件
List<string> listFJ = new List<string>();//保存附件路径
List<string> listFJName = new List<string>();//保存附件名字
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
string fileType = Path.GetExtension(NextFile.FullName).ToString().ToLower();
if (fileType == ".xls" || fileType == ".xlsx")
{
string fileDate = NextFile.Name.Substring(, );
DateTime dtime = DateTime.ParseExact(fileDate, "yyyyMMdd", null);
if (dtime >= sTime && dtime <= eTime)
{
listFJ.Add(Server.MapPath("~/Content/ExcelFile/") + NextFile.Name);
listFJName.Add(NextFile.Name);
}
}
}
if (listFJ.Count > && listFJName.Count > )
{
string time = DateTime.Now.Ticks.ToString();
ZipFileMain(listFJ.ToArray(), listFJName.ToArray(), Server.MapPath("~/Content/ExcelFile/" + time + ".zip"), );//压缩文件
DownloadFile(Server.UrlEncode("附件.zip"), Server.MapPath("~/Content/ExcelFile/" + time + ".zip"));//下载文件
}
} /// <summary>
/// 下载文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="filePath"></param>
private void DownloadFile(string fileName, string filePath)
{
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
System.IO.File.Delete(filePath);//删除已下载文件
Response.End();
} /// <summary>
/// 压缩文件
/// </summary>
/// <param name="fileName">要压缩的所有文件(完全路径)</param>
/// <param name="fileName">文件名称</param>
/// <param name="name">压缩后文件路径</param>
/// <param name="Level">压缩级别</param>
public void ZipFileMain(string[] filenames, string[] fileName, string name, int Level)
{
ZipOutputStream s = new ZipOutputStream(System.IO.File.Create(name));
Crc32 crc = new Crc32();
//压缩级别
s.SetLevel(Level); // 0 - store only to 9 - means best compression
try
{
int m = ;
foreach (string file in filenames)
{
//打开压缩文件
FileStream fs = System.IO.File.OpenRead(file);//文件地址
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, , buffer.Length);
//建立压缩实体
ZipEntry entry = new ZipEntry(fileName[m].ToString());//原文件名
//时间
entry.DateTime = DateTime.Now;
//空间大小
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
s.PutNextEntry(entry);
s.Write(buffer, , buffer.Length);
m++;
}
}
catch
{
throw;
}
finally
{
s.Finish();
s.Close();
}
}
.net 批量导出文件,以ZIP压缩方式导出的更多相关文章
- openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- Android总结之Gzip/Zip压缩
前言: 做过Android网络开发的都知道,在网络传输中我们一般都会开启GZIP压缩,但是出于刨根问底的天性仅仅知道如何开启就不能满足俺的好奇心的,所以想着写个demo测试一下比较常用的两个数据压缩方 ...
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...
- RAR和ZIP:压缩大战真相
转:http://fqd2eh4y.blog.163.com/blog/static/69195855200801035015857 前言--王者归来? 等待足足两年之久,压缩霸主WinZip终于在万 ...
- 正确的 zip 压缩与解压代码
网上流传的zip压缩与解压 的代码有非常大的问题 尽管使用了ant进行压缩与解压,可是任务的流程还是用的java.util.zip 的方式写的,我在使用的过程中遇到了压缩的文件夹结构有误,甚至出现不同 ...
- java基础---->Zip压缩的使用(转)
java中提供了对压缩格式的数据流的读写.它们封装到现成的IO 类中,以提供压缩功能.下面我们开始java中压缩文件的使用. 目录导航: 关于压缩的简要说明 GZIP压缩文件的使用 ZIP压缩文件的使 ...
- Inno Setup入门(三)——指定压缩方式
Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的时间或者需要更大的内存空间,可用的值如下: zip zip/1到zip/9 bzip bzip/1 到bzip/9 l ...
- Java ZIP压缩和解压缩文件并兼容linux
JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...
随机推荐
- flask之数据库的交互
一:关系型数据库 mysql Flask-SQLAlchemy管理关系型数据库. mysql数据库引擎:url : mysql://username:passowrd@hostname/databas ...
- 027:for标签使用详解
for标签使用详解: for...in... 标签: for...in... 类似于 Python 中的 for...in... .可以遍历列表.元组.字符串.字典等一切可以遍历的对象.示例代码如下: ...
- BZOJ 2226: [Spoj 5971] LCMSum 莫比乌斯反演 + 严重卡常
Code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define setIO(s) freopen(s".in" ...
- FastDFS整合SpringBoot(五)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- Python_010(迭代器)
一.函数名的运用 1.函数名的内存地址 def func(): print("英雄联盟") print(func) #输出结果: <function func at 0x00 ...
- Win10真正好用之处
第一步. 关闭无用服务 刚装好Win10的时候,整部电脑响应很慢,有时什么都不做,硬盘灯也能狂闪半天.很明显,这是微软爸爸默认开启的服务未被及时关闭所致. 网上有很多文章指导新手如何关闭系统服务,但 ...
- Nginx 禁止IP访问 只允许域名访问
今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,从网络上搜到以下解决方案: Nginx的默认虚拟主机在用户 ...
- [洛谷P3943]:星空(DP+最短路)
题目传送门 题目背景 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷.你来过,然后你走后,只留下星空. 题目描述 逃不掉的那一天还是来了,小$F$看着夜空发呆.天上空荡荡的,没有一颗星星——大概是 ...
- Spring Boot 集成 RabbitMQ 实战
Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 ...
- win7系统开机启动出现蓝屏,提示BAD_SYSTEM_CONFIG_INFO
因为我在msconfig->引导->高级选项中将最大内存勾选,最大内存勾选后是4096MB,但是在点击确定按钮后,会自动变成0MB(点击确定按钮后再点击高级选项),导致系统无法识别内存,开 ...