vue实现图片下载功能so easy

  • 1.在前端实现图片下载分为同源图片下载和非同源图片下载
  • 2.解决方案可以根据同源和非同源来制定

同源图片下载方案

html中可以这样写

<a href="./img/logo.png" download="logo.png"></a>

javascript中可以这样写

function imgDownload(url,name){//创建一个a标签const a_b = document.createElement('a');//设置href指向a_b.href = url;//设置图片下载名字a_b.download = name;//点击a标签a_b.click()
}
imgDownload('./img/logo.png','logo.png');

非同源图片下载方案

  • 1.将图片转化为blob或者base64
//将图片转化为blob对象再进行下载
function urlToBlobAndDownload(url){//实例化一个img对象const img = new Image();//设置img的图片路径img.src = url;//设置跨域解决img.setAttribute('crossOrigin', 'Anonymous');//img加载完后处理img.onload = function() {//创建一个canvas对象const canvas = document.createElement('canvas')//把图片的宽度设为canves的宽度canvas.width = img.width//把图片的高度设为canves的高度canvas.height = img.height//创建一个2d画布const ctx = canvas.getContext('2d')// 将img中的内容画到画布上ctx.drawImage(img, 0, 0, canvas.width, canvas.height)// 将画布内容转换为Blobcanvas.toBlob((blob) => {// blob转为同源urllet blobUrl = window.URL.createObjectURL(blob)// 创建a链接const a = document.createElement('a')a.href = blobUrla.download = ''// 触发a链接点击事件,浏览器开始下载文件a.click()})}
}
//将图片转化为base64再进行下载
function urlToBase64AndDownload(url){//实例化一个img对象const img = new Image();//设置img的图片路径img.src = url;//设置跨域解决img.setAttribute('crossOrigin', 'Anonymous');//img加载完后处理img.onload = function() {//创建一个canvas对象const canvas = document.createElement('canvas')//把图片的宽度设为canves的宽度canvas.width = img.width//把图片的高度设为canves的高度canvas.height = img.height//创建一个2d画布const ctx = canvas.getContext('2d')// 将img中的内容画到画布上ctx.drawImage(img, 0, 0, canvas.width, canvas.height)// 将画布内容转换为base64let base64 = canvas.toDataURL()// 创建a链接const a = document.createElement('a')a.href = base64a.download = ''// 触发a链接点击事件,浏览器开始下载文件a.click()}
}

以上两种方案生成的图片格式大部分为png格式,可以打开看的,但是gif的下载就为一帧了,下面这种方案可以实现gif的下载,不改变格式

  • 2.通过axios请求来实现图片下载
function downloadByAxios(url,name){axios({//设置图片路径url:url,//设置请求方法为get请求method:'get',//设置相应类型为blobresponseType: 'blob'}).then(//得到的是一个blob对象res => {let url = window.URL.createObjectURL(res.data)const a = document.createElement('a');a.href = urla.download = namea.click()})
}

坑点

如果是请求oss上的图片的话,会有一个跨域的提示,解决方案是去oss服务控制台设置跨域规则

oss图片跨域解决方案

vue实现图片下载功能so easy相关推荐

  1. 织梦图集php,织梦怎么为新图集页面增加图片下载功能

    织梦怎么为新图集页面增加图片下载功能? 织梦DEDECMS为新图集页面增加图片下载功能 推荐学习:织梦cms 编辑打开 /templets/default/images/photo/heiphoto. ...

  2. jq实现图片下载功能

    很多时候网站中都会有下载功能,一般的下载直接指定a链接然后直接就能下载了,但是有些文件比较特殊,如图片,指定a链接的时候会直接在浏览器中打开图片,这并不是我们想要的,有人说在a链接中加个downloa ...

  3. Java实现网页截屏功能(图片下载功能)的几种方式(整理)

    最近的项目中,需要实现一个将网页中显示的内容导出为图片的功能,故研究了一下可以实现这个功能的各种方式,整理在此,以供以后使用. p.s. 本人为java研发,所有涉及的代码,实现方式均为java的方式 ...

  4. java实现图片下载功能

    前端页面 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  5. Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器

    前言 您可以滑动到文章最底部,直接克隆完整示例 Gitee 仓库,与本文教程最终效果一致. 在项目开发中,您难免会遇到图片上传到服务器之前,用户可进行裁剪的需求, 在看了网上大部分教程后,代码都非常乱 ...

  6. JS -- base64实现图片下载功能

    思路 前端拿到处理好的 base64 数据,创建 a 下载图片 代码: const base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE ...

  7. JS实现图片下载功能

    download (config) {const a = document.createElement('a') // 创建一个a标签a.href = config.src // a标签的src属性赋 ...

  8. ssm上传文件获取路径_SSM实现图片上传下载功能

    0. 基本步骤框架搭建 实现带图片上传的注册功能 实现下载功能 1. 框架搭建 Step1 创建开发项目 创建基础MVC包结构:controller.service.mapper.pojo Step2 ...

  9. vue中如何实现图片放大镜功能

    vue中图片放大镜功能 1.在vue项目中不可避免的会做一个图片放大镜的弄能(例如.商城.店铺等),今天同事问了这个功能恰好以前写过,因此记录一下. 2.废话不多说直接上代码: 父组件中: <t ...

最新文章

  1. 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
  2. C++中的类模板详细讲述
  3. 使用cvs或svn从sourceforge上获取开源项目的方法[转载]
  4. leetcode1302. 层数最深叶子节点的和(深度优先搜索)
  5. vestacp 远程mysql_免费使用VestaCP控制面板的文件管理器 | 雷雨博客
  6. 前端居中模板(常用HTML模板)
  7. Java 中文乱码问题
  8. 一个canvas的demo
  9. 使用百度Android地图SDK显示地图定位
  10. 关于bmp图片的c语言算法读入,BMP图像直方图均衡算法(C语言大作业)
  11. 团队管理之《带团队,就是用好你身边的人》
  12. blockquote
  13. 【JZOJ 省选模拟】6638.Seat
  14. Junit Test a getter
  15. Android 高仿微信群聊头像
  16. dell笔记本外接显示器_笔记本就一个 hdmi 的接口,如何外接 2 个 dell 显示器?...
  17. 【Ubuntu】Ubuntu更换主题
  18. 在matlab中生成m序列
  19. PDF预览完整解决方案及各种兼容(VUE版)
  20. hMailServer邮件服务下载安装详细步骤、汉化、配置(内含解决.NET Framework和libmysql.dll32位库的问题)

热门文章

  1. 【智能物流】AGV在汽车零部件厂内物流的应用案例;AGV自动引导车选型手册
  2. idc主机托管服务器管理系统,idc主机托管服务器管理系统
  3. android省电开发之cpu降频
  4. [原]红帽 Red Hat Linux相关产品iso镜像下载
  5. ADSL宽带速率上行、下行速率
  6. python 计算图像结构张量(Structure_tensor)
  7. 对于尺度与分辨率的理解
  8. 程序员的职业道德:包的命名规范
  9. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS)
  10. Windows系统时钟间隔