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图片下载方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Bootstrap安装环境配置教程分享

    Bootstrap安装环境配置教程分享

    这篇文章主要为大家分享了Bootstrap安装环境配置教程,安装步骤非常简单,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • js以对象为索引的关联数组

    js以对象为索引的关联数组

    在代码逻辑中更多的是用关联数组的方式。但即使是这样我们也很少使用对象类型作为键值对的键名。
    2010-07-07
  • 详解如何在TypeScript中声明全局变量

    详解如何在TypeScript中声明全局变量

    本文主要介绍了如何在 TypeScript 中声明全局变量,在TypeScript中,可以使用declare关键字来声明全局变量,这样的声明告诉编译器该变量是在其他地方定义的,而不需要实际的实现,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 使用JS代码实现点击按钮下载文件

    使用JS代码实现点击按钮下载文件

    有时候我们在网页上需要增加一个下载按钮,让用户能够点击后下载页面上的资料,那么怎样才能实现功能呢?今天小编给大家分享两种方法实现js实现点击按钮下载文件,需要的朋友参考下吧
    2016-11-11
  • 详解JavaScript数组reduce()方法的高级技巧

    详解JavaScript数组reduce()方法的高级技巧

    reduce() 是 JavaScript 中一个很有用的数组方法,这篇文章主要介绍了JavaScript中reduce()方法的高级技巧,感兴趣的小伙伴可以了解一下
    2023-03-03
  • js实现顶部可折叠的菜单工具栏效果实例

    js实现顶部可折叠的菜单工具栏效果实例

    这篇文章主要介绍了js实现顶部可折叠的菜单工具栏效果,可实现鼠标滑过菜单工具栏出现折叠与展开效果,涉及javascript鼠标事件及样式的操作技巧,需要的朋友可以参考下
    2015-05-05
  • javascript 实现划词标记划词搜索功能

    javascript 实现划词标记划词搜索功能

    在页面中加上这串代码就行了,同时还有搜索功能。
    2009-10-10
  • JavaScript异步编程中async函数详解

    JavaScript异步编程中async函数详解

    async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise
    2022-11-11
  • JS实现密码框的显示密码和隐藏密码功能示例

    JS实现密码框的显示密码和隐藏密码功能示例

    这篇文章主要介绍了JS实现密码框的显示密码和隐藏密码功能,涉及javascript针对页面form表单元素动态操作的相关技巧,需要的朋友可以参考下
    2016-12-12
  • 一文详解如何处理前端表单验证确保用户输入合法

    一文详解如何处理前端表单验证确保用户输入合法

    这篇文章主要介绍了如何处理前端表单验证确保用户输入合法的相关资料,并分享了最佳实践和常见坑点,通过合理使用这些方法,可以构建出健壮、友好的验证系统,文中给出了详细的代码示例,需要的朋友可以参考下
    2025-03-03

最新评论