ajax+ashx:实现文件的批量导出
背景:
最近公司有一个需求,就是实现excle的批量导出(一次性导出多个excle)。
实现方式:
想到的实现方式:
1、发起一个导出请求,然后批量生产需要导出的excle文件,最后将文件生成一个压缩包,最后将生成的压缩包输出到前端页面。
该方式的优缺点:
优点:对应用户来说,只需要接受一个压缩包即可
缺点:后端在处理逻辑上变得复杂
需要考虑多线程处理
需要引入生成压缩包逻辑
需要生成零时文件
如果用户没有按照解压工具,文件不能正常打开
2、需要导出多个excle时,前端发出多个导出文件请求
该方法的优缺点:
优点:功能逻辑变得根据加单,单一
缺点:用户会接受到多个文件
综合开发进度及其各方面,最后我们采用了方案2
下面我整理一下方案2的实现DEMO,不过很多也是在网上找的原型
前端代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$("#Button1").click(function () {//点击下载按钮 //// 每一个导出的文件间隔时间
let triggerDelay = 100; //// 动态生成的导出文件的form表单自动删除时间
//// 备注,这个时间间隔不能太短,因为太短,当移除掉forem表单时,如果文件还未导出,因为与后端链接中断而导致导出失败
let removeDelay = 300000;
let url_arr = ['Handler1.ashx?', 'Handler1.ashx']; url_arr.forEach(function (item, index) {
_createIFrame(item, index * triggerDelay, removeDelay);
})
function _createIFrame(url, triggerDelay, removeDelay) {
//动态添加iframe,设置src,然后删除
setTimeout(function () {
var frame = $('<iframe style="display: none;" class="multi-download"></iframe>');
frame.attr('src', url);
$(document.body).after(frame);
setTimeout(function () {
frame.remove();
}, removeDelay);
}, triggerDelay);
}
})
})
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="下载" />
</div>
</form>
</body>
</html>
后端代码:
此处后端代码先直接下载一个本地的excl文件,后续会单独写一遍关于如何生成excle的帖子
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { string s_fileName = "222.xlsx";
HttpContext.Current.Response.ContentType = "application/ms-download";
string s_path = HttpContext.Current.Server.MapPath(s_fileName);
System.IO.FileInfo file = new System.IO.FileInfo(s_path);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Type", "application/octet-stream");
HttpContext.Current.Response.Charset = "utf-8";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename="
+ System.Web.HttpUtility.UrlEncode("222.xlsx", System.Text.Encoding.UTF8));
HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
HttpContext.Current.Response.WriteFile(file.FullName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.End();
} public bool IsReusable {
get {
return false;
}
}
}
ajax+ashx:实现文件的批量导出的更多相关文章
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- CorelDRAW多个文件如何批量导出JPG
好多同学对于CorelDRAW 2018批量导出图片格式的操作不太了解.这种情况比较常见,比如设计了一本画册,在同一个文档中页面比较多,如果一页一页导出那将是一项巨大的工程,这时候我们就会想到CDR的 ...
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- 怎么用CDR来批量导出图片
我们通过CorelDRAW上方菜单栏"布局"中的"插入页面"可以创建多个页面,同时编辑,适合比如书籍排版,杂志排版等等这些需要进行多页面编辑的工作. 图1:CD ...
- ArcGIS使用技巧(七)——批量导出
新手,若有错误还请指正! 在ArcGIS中如何将栅格数据批量导出?用到"复制栅格这个工具",这里我用的例子是:将ArcGIS默认输出的DEM文件夹批量导出为tif格式.(如果是文件 ...
- ajax+ashx 完美实现input file上传文件
1.input file 样式不能满足需求 <input type="file" value="浏览" /> IE8效果图: Firefox效 ...
- mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1
数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件,实现文 ...
- php批量导出pdf文件的脚本(html-PDf)
背景:突然有大量的文件需要导出成PDF文件,写一个批量导出pdf的脚本,同时文件的命名也需要有一定的规则 导出方式:向服务器中上传csv文件,csv文件中包含文件的地址和相对应的文件命名. 如下格式: ...
- 如何将一个PDF文件里的图片批量导出
假设我有下面这个PDF文件,里面有很多图片,我想把这些图片批量导出,而不是在Adobe Acrobat Reader里一张张手动拷贝: 本文介绍一种快捷做法. 用PDF-XChange Editor打 ...
随机推荐
- CentOS7 启动中文输入法
CentOS 系统中是带有中文输入法的(智能拼音),启动方式如下: Applications --> System Tools --> Setting --> Region &am ...
- OpenCV图像分割1
1.基于阈值 1.1原理 灰度阈值化,假设输入图像为f,输出图像为g,则阈值化公式如下: g(i,j)=1 当f(i,j)>=T g(i,j)=0 当f(i,j)<T 1.2适用范围 当 ...
- discover功能--自动发现主机
discover功能,让监控的管理更加管理和自动化,现在来演示下如何使用discover功能自动发现主机 1.配置discover 2.在被侦测机上安装zabbix agent 安装完成后,修改配置( ...
- python学习第五章
1.继承 即是一个派生的类(derived class)继承基类(base class)的字段和方法,继承也允许把一个 派生类的对象作为 一个基类 对象对待.通俗来讲就是方便,继承前人的代码,减少工作 ...
- PMP:7.项目成本管理
内容中包含 base64string 图片造成字符过多,拒绝显示
- Beta阶段冲刺集合贴
第零篇准备博客:https://www.cnblogs.com/coolgirls/p/9066239.html 第一篇冲刺博客:https://www.cnblogs.com/coolgirls/p ...
- 调试Release发布版程序的Crash错误(转)
http://blog.sina.com.cn/s/blog_48f93b530100fsln.html 在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问 ...
- maven理论基础
Maven介绍 Maven是一个Java项目管理和构建工具 Maven使用pom.xml定义项目内容,并使用预设的目录结构 在Maven中声明一个依赖项可以自动下载并导入classpath Maven ...
- linux 环境安装
lnmp.lamp.lnmpa一键安装包(Updated: 2019-02-17) 422 A+ 所属分类:工具 这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa( ...
- 通过用jQuery写一个页面,我学到了什么
概述 前几天面试,hr发来一个测试文件,让我做做看.我一看,其实就是根据PSD需求写一个页面,再加上一些互动效果即可. 刚好我之前学了切图,jquery等知识还没练手过,于是高兴的答应了. 最后花了3 ...