js图片下载方式集合(附详细代码)

 更新时间:2024年01月18日 09:24:53   作者:失眠时间  
关于图片下载问题,不同的浏览器,需要兼容的下载方式,这篇文章主要给大家介绍了关于js图片下载方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、文件流格式下载

创建 a 标签下载文件流格式图片

/**
 * 创建 <a> 标签下载文件流格式图片
 * @param file 
 * @param fileName 
 */
export const downloadFile = (file: string, fileName?: string) => {
  const blob = new Blob([file]);
  const fileReader = new FileReader();
  fileReader.readAsDataURL(blob);
  fileReader.onload = (e) => {
    const a = document.createElement("a");
    a.download = fileName || '0123456.PNG';
    a.href = e.target?.result as string;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  };
}

文件流格式还可以转为Base64格式之后,再以链接格式下载

转换方式如下

export const downloadFileUrl = (file: Blob) => {
  const blob = new Blob([file]);
  const fileReader = new FileReader();
  fileReader.readAsDataURL(blob);
  fileReader.onload = (e) => {
    const url = e.target?.result as string;
    downloadImage(`data:image/png;Base64,${url}`, 'testefd')
  };
}

二、链接格式下载

/**
 * 根据图片路径下载
 * @param imgsrc 图片路径
 * @param name 下载图片名称
 * @param type 格式图片,可选,默认png ,可选 png/jpeg
 */
export const downloadImage = (imgsrc: string, name: string, type: string = 'png') => {
  let image = new Image();
  // 解决跨域 Canvas 污染问题
  image.setAttribute("crossOrigin", "anonymous");
  image.onload = function () {
    let canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;
    let context = canvas.getContext("2d");
    context?.drawImage(image, 0, 0, image.width, image.height);
    let url = canvas.toDataURL(`image/${type}`); //得到图片的base64编码数据
    let a = document.createElement("a"); // 生成一个a元素
    let event = new MouseEvent("click"); // 创建一个单击事件
    a.download = name || "pic"; // 设置图片名称
    a.href = url; // 将生成的URL设置为a.href属性
    a.dispatchEvent(event); // 触发a的单击事件
  }
  //将资源链接赋值过去,才能触发image.onload 事件
  image.src = imgsrc
}

总结 

到此这篇关于js图片下载方式的文章就介绍到这了,更多相关js图片下载方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript简单编程实例学习

    JavaScript简单编程实例学习

    在本篇文章里小编给大家整理的是关于JavaScript简单编程实例学习内容,有兴趣的朋友们可以参考下。
    2020-02-02
  • 浅谈Emergence.js 检测元素可见性的 js 插件

    浅谈Emergence.js 检测元素可见性的 js 插件

    这篇文章主要介绍了浅谈Emergence.js 检测元素可见性的 js 插件,详细的介绍了Emergence.js安装和使用方法,具有一定的参加性,有兴趣的可以了解一下
    2017-11-11
  • Bootstrap表单使用方法详解

    Bootstrap表单使用方法详解

    这篇文章主要为大家详细介绍了Bootstrap表单使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • uniapp中获取dom元素的方法及更改dom元素颜色踩坑记录

    uniapp中获取dom元素的方法及更改dom元素颜色踩坑记录

    最近学到了一个比较好用的框架uni-app,可以做六端适配,学习一下,下面这篇文章主要给大家介绍了关于uniapp中获取dom元素的方法及更改dom元素颜色踩坑记录的相关资料,需要的朋友可以参考下
    2023-03-03
  • 值得学习的JavaScript调试技巧分享

    值得学习的JavaScript调试技巧分享

    这篇文章主要给大家介绍了一些JavaScript调试技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 深入理解JavaScript中实例对象和new命令

    深入理解JavaScript中实例对象和new命令

    典型的面向对象编程语言(比如C++和 Java),都有“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例,下面这篇文章主要给大家介绍了关于JavaScript中实例对象和new命令的相关资料,需要的朋友可以参考下
    2022-12-12
  • 微信小程序实现按字母排列选择城市功能

    微信小程序实现按字母排列选择城市功能

    这篇文章主要介绍了微信小程序实现按字母排列选择城市功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 微信JSAPI Ticket接口签名详解

    微信JSAPI Ticket接口签名详解

    这篇文章主要为大家详细介绍了微信JSAPI Ticket接口签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 纯js实现页面返回顶部的动画(超简单)

    纯js实现页面返回顶部的动画(超简单)

    下面小编就为大家带来一篇纯js实现页面返回顶部的动画(超简单)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • uni-app PC端宽屏适配方案图文详解

    uni-app PC端宽屏适配方案图文详解

    现在uni-app终于官方支持PC宽屏,下面这篇文章主要给大家介绍了关于uni-app PC端宽屏适配方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论