当前位置:   article > 正文

JS 实现触发下载内容(H5 download)

h5 下载代码示例

概述

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

参考资料:

JS前端创建html或json文件并浏览器导出下载

理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型

实现方法

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

<a href="large.jpg" download>下载</a>

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

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

  1. var link = document.createElement('a');
  2. //设置下载的文件名
  3. link.download = filename;
  4. link.style.display = 'none';
  5. //设置下载路径
  6. link.href = src;
  7. //触发点击
  8. document.body.appendChild(link);
  9. link.click();
  10. //移除节点
  11. document.body.removeChild(link);

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

利用canvas转base64下载图片

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

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

利用Blob对象下载文本

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

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

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

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

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

  1. var canvas = document.getElementById('canvas');
  2. canvas.toBlob(function(blob) {
  3. var newImg = document.createElement('img'),
  4. url = URL.createObjectURL(blob);
  5. newImg.onload = function() {
  6. // no longer need to read the blob so it's revoked
  7. URL.revokeObjectURL(url);
  8. };
  9. newImg.src = url;
  10. document.body.appendChild(newImg);
  11. });

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号