<script type="text/javascript">
/**
* Javascript 多文件下载
* @author Barret Lee
* @email barret.china@gmail.com
*/
var Downer = (function(files){
var h5Down = !/Trident|MSIE/.test(navigator.userAgent);

/**
* 在支持 download 属性的情况下使用该方法进行单个文件下载
* @param {String} fileName
* @param {String|FileObject} contentOrPath
* @return {Null}
*/
function downloadFile(fileName, contentOrPath){
var aLink = document.createElement("a"),
evt = document.createEvent("HTMLEvents"),
isData = contentOrPath.slice(0, 5) === "data:",
isPath = contentOrPath.lastIndexOf(".") > -1;

// 初始化点击事件
evt.initEvent("click",false,false);

// 添加文件下载名
aLink.download = fileName;

// 如果是 path 或者 dataURL 直接赋值
// 如果是 file 或者其他内容,使用 Blob 转换
aLink.href = (isPath || isData) ? contentOrPath
: URL.createObjectURL(new Blob([contentOrPath]));

aLink.dispatchEvent(evt);
}

/**
* [IEdownloadFile description]
* @param {String} fileName
* @param {String|FileObject} contentOrPath
*/
function IEdownloadFile(fileName, contentOrPath, bool){
var isImg = contentOrPath.slice(0, 10) === "data:image",
ifr = document.createElement('iframe');

ifr.style.display = 'none';
ifr.src = contentOrPath;

document.body.appendChild(ifr);

// dataURL 的情况
isImg && ifr.contentWindow.document.write("<img src='" +
contentOrPath + "' />");

// 保存页面 -> 保存文件
// alert(ifr.contentWindow.document.body.innerHTML)
if(bool){
ifr.contentWindow.document.execCommand('SaveAs', false, fileName);
document.body.removeChild(ifr);
} else {
setTimeout(function(){
ifr.contentWindow.document.execCommand('SaveAs', false, fileName);
document.body.removeChild(ifr);
}, 0);
}
}

/**
* [parseURL description]
* @param {String} str [description]
* @return {String} [description]
*/
function parseURL(str){
return str.lastIndexOf("/") > -1 ? str.slice(str.lastIndexOf("/") + 1) : str;
}

return function(files){
// 选择下载函数
var downer = h5Down ? downloadFile : IEdownloadFile;

// 判断类型,处理下载文件名
if(files instanceof Array) {
for(var i = 0, l = files.length; i < l ; i++)
// bug 处理
downer(parseURL(files[i]), files[i], true);
} else if(typeof files === "string") {
downer(parseURL(files), files);
} else {
// 对象
for(var file in files) downer(file, files[file]);
}
}

})();

function down1(){
Downer("http://115.28.175.148/test/files/12_12.xml");
}

function down2(){
Downer(["../file/test.txt","../file/test.txt"]);
}
</script>

<a href="javascript:" onclick="down1(); return false;">单文件下载</a>

<a href="javascript:" onclick="down2(); return false;">多文件下载</a>

js实现单文件以及多文件下载的更多相关文章

  1. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  2. [转]SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  3. JAVA SpringMVC + FormDate + Vue + file表单 ( 实现 js 单文件和多文件上传 )

    JS 部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  4. vue.js单文件组件中非父子组件的传值

    最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...

  5. 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5

    前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...

  6. Spring MVC-------文件上传,单文件,多文件,文件下载

    Spring MVC 框架的文件上传是基于 commons-fileupload 组件的文件上传,只不过 Spring MVC 框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现,取消了 ...

  7. Vue.js的组件(slot/动态组件等)、单文件组件、递归组件使用

    一.组件 1> 组件命名方式有两种(注意:在DOM模板中只有kebab-case命名方法才生效): html中引用组件: <!-- 在DOM模板中,只有 kebab-case命名才生效 - ...

  8. grunt 单独压缩多个js和css文件【转】

    原文地址:http://xiaomiya.iteye.com/blog/2177877 使用grunt来压缩前端js,css文件 因为最近做的客户端本地项目有用到十几个js,js提交之前都需要压缩.用 ...

  9. node.js表单——formidable/////z

    node.js表单--formidable   node处理表单请求,需要用到formidable包.安装formidable包的命令如下: npm install formidable 安装pack ...

随机推荐

  1. Linux中多线程信号的处理

    1. 博文:Linux多线程中使用信号-1  http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结  ...

  2. mysql远程连接命令(转)

    一.MySQL 连接本地数据库,用户名为"root",密码"123"(注意:"-p"和"123" 之间不能有空格) C: ...

  3. csdn的app打开贴子显示空白?

    csdn或者虎扑的app打开贴子显示空白,卸载后重装仍然有同样的问题. 可能是android系统的WebView版本太落后. 打开应用市场,更新WebView就可以解决了.

  4. js之字符串操作

    1.字符串查找 var str = "source_content10"; if(str.indexOf("source_content") !== false ...

  5. oracle java SE

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

  6. memcached+magent实现memcached集群

    首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源:无法同步数据,容易造成单点故障.(memagent代 ...

  7. java 汉语转拼音(全拼,首字母)

    import java.util.*; import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.for ...

  8. 传统B2B中小型企业如何做好全网营销

    优网特独创全网营销服务理念,全网营销即以企业网站推广为核心,通过SEO.SEM.BBS营销.博客营销.微营销.即时通讯营销.网络口碑营销.视频营销.邮件营销.SNS营销等网络营销手段,全面提升企业网站 ...

  9. linux命令连接远程服务器

    ssh root@IP    ***连接远程ip cd 路径           ***进入指定路径 ll                   ***查看当前文件 ll -a             ...

  10. 设计模型MVC和JavaBean

    六.设计模型1和设计模型2(MVC)1.模型1:JSP+JavaBean2.模型2:MVC M:Model模型 JavaBean V:视图 JSP C:控制器 Servlet 七.模型1开发一个简单的 ...