博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 实现触发下载内容(H5 download)
阅读量:4956 次
发布时间:2019-06-12

本文共 1628 字,大约阅读时间需要 5 分钟。

概述

我对使用js控制下载非常感兴趣,在网上查资料的时候碰巧看到了相关实现方法,记录下来供以后开发时参考,相信对其他人也有用。

参考资料:

实现方法

一种实现方法是利用H5中的download属性。如果给a标签加了这个属性的话,点击a标签不会跳到链接或者打开图片,而是会直接下载资源。示例如下:

下载

注意:这个属性的兼容性很差,貌似不兼容safara,并且仅适用于同源URL。

于是我们的实现方法是,在用户点击的时候,给html添加一个拥有href和download属性的a标签,然后用js对a标签进行点击,然后就可以自动下载了。相关代码如下:

var link = document.createElement('a');//设置下载的文件名link.download = filename;link.style.display = 'none';//设置下载路径link.href = src;//触发点击document.body.appendChild(link);link.click();//移除节点document.body.removeChild(link);

然后怎么来获得这个下载路径src呢?下面介绍2种方法。

利用canvas转base64下载图片

我们都知道,利用canvas可以把画布转化为一个base64的图片,这个base64代码就是图片源。示例如下:

var canvas = document.createElement('canvas');var context = canvas.getContext('2d');//这里在canvas上面进行一些操作//这里导出src,然后把这里的src赋给上面的src即可var src = context.toDataURL('image/jpeg');

利用Blob对象下载文本

我们可以把文本用Blob对象转化为二进制,然后利用上面的方法下载。示例如下:

//content是文本或字符串内容var blob = new Blob([content]);//这里导出src,然后把这里的src赋给上面的src即可var src = URL.createObjectURL(blob);

对于创建blob对象,有下面几个示例:

//创建字符串对象var blob1 = new Blob([JSON.stringify(obj)]);//创建一个DOMString对象var s = '
Hello World!!
'var blob2 = new Blob([s], {type: 'text/xml'});//创建一个ArrayBuffer对象var abf = new ArrayBuffer(8);var blob3 = new Blob([abf], {type: 'text/plain'});

另外canvas有一个toBlob的api,使用示例如下:

var canvas = document.getElementById('canvas');canvas.toBlob(function(blob) {  var newImg = document.createElement('img'),      url = URL.createObjectURL(blob);  newImg.onload = function() {    // no longer need to read the blob so it's revoked    URL.revokeObjectURL(url);  };  newImg.src = url;  document.body.appendChild(newImg);});

转载于:https://www.cnblogs.com/yangzhou33/p/9521281.html

你可能感兴趣的文章
Tomcat的Manager显示403 Access Denied
查看>>
20172310 2017-2018-2 《程序设计与数据结构》第十周学习总结
查看>>
谈渗透测试
查看>>
Rebranding
查看>>
for 循环增强
查看>>
记事本GUI综合
查看>>
第三次作业
查看>>
sql常用函数
查看>>
Socket.io在线聊天室
查看>>
2016022607 - redis配置文件
查看>>
【android】uses-permission和permission具体解释
查看>>
javascript字符串方法
查看>>
spring中bean的生命周期
查看>>
查询运营商的所有下级运营商
查看>>
字符编码笔记:ASCII,Unicode和UTF-8【转载】
查看>>
属性的copy和mutableCopy修饰符(?)
查看>>
Python批量修改图片格式和尺寸
查看>>
转:nginx入门指南,快速搭建静态文件服务器和代理服务器
查看>>
ios开发之-本地推送通知
查看>>
[bootstrap]模态框总结
查看>>