<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. iOS开发中打电话发短信等功能的实现

    在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...

  2. 批量执行SQL语句,进行删除,插入或者更改。

    private bool ExecuteTransaction(List<string> list) { using (SqlConnection connection = new Sql ...

  3. ABP mapto 映射

    obj1.MapTo(obj2); obj1=>obj2: 在obj1实体里添加映射 [AutoMap(typeof(obj2))] public class obj1 { }

  4. hdu 2586 How far away ?(离线求最近公共祖先)

    #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #i ...

  5. MySQL安装,启动

    一.安装.配置环境变量 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 配置环境变量:把你的安装目录复制下,例如:G:\Do ...

  6. 获取 IP 地址

    package j2se.core.net.base; import java.net.InetAddress;import java.net.UnknownHostException; public ...

  7. nfs:环境搭建

    准备环境 通过VirtualBox创建两台虚拟机client1和client2,这两台虚拟机和物理主机组成一个网络.将物理主机作为NFS的服务端,虚拟机client1和client2作为NFS的客户端 ...

  8. 解决canvas转base64/jpeg时透明区域变成黑色背景的方法

    最近在工作遇到一个问题,在将png图片转jpeg时,透明区域被填充成黑色,通过网上的介绍找到了解决的方法,现在总结下分享给同样遇到这个问题的朋友们,感兴趣的可以通过本文详细学习下. 在用canvas将 ...

  9. 协程,事件驱动,异步io模型,异步网络框架

    协程是一种用户态的轻量级线程,内核不知道它的存在.协程运行于一个线程中,协程的切换是由用户控制的.线程的切换是由cpu来控制的,而协程的切换是由用户控制的.协程的执行时串行的. select/poll ...

  10. C# 将短时间格式变长正常时间格式

    DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));             ...