后端给了url,让前端处理下载,刚开始只处理图片url下载,然后用最简单的方式,创建a标签,叫download属性,发现竟然不行,找了一下原因,原来是url地址跨域了,这里需要让后端处理一下服务器对url跨域问题,然后前端代码线上:

downPic(urls, fileName) {

const image = new Image()

// 解决跨域 Canvas 污染问题

image.setAttribute('crossOrigin', 'anonymous')

image.onload = () => {

const canvas = document.createElement('canvas')

canvas.width = image.width

canvas.height = image.height

const context = canvas.getContext('2d')

context.drawImage(image, 0, 0, image.width, image.height)

canvas.toBlob((blob) => {

const url = URL.createObjectURL(blob)

const a = document.createElement('a')

a.download = fileName || 'photo'

a.href = url

a.click()

a.remove()

URL.revokeObjectURL(url)

})

}

image.src = urls

},

后端处理服务器跨域问题之后,这种方式的确可以下载图片;但是!后来增加需求,要同时满足下载音频和视频,用这种方式就不行了!只能想其他办法:

后来去网上找了很多办法,最终了解到,想要下载音频和视频  只能让后端把url转成文件流格式的数据,然后前端才能下载;上代码:

downPic(urls, fileName) {

let type = urls.split(".");

type = type[type.length - 1];

httpParmas(w_url.download, { fileUrl: urls }).then(res => {

if (res) {

let blobUrl = window.URL.createObjectURL(new Blob([res], { type: downType[type] }))

let link = document.createElement('a')

document.body.appendChild(link)

link.style.display = 'none'

link.href = blobUrl

// 设置a标签的下载属性,设置文件名及格式,后缀名最好让后端在数据格式中返回

link.setAttribute('download', fileName)

// 自触发click事件

link.click()

document.body.removeChild(link)

window.URL.revokeObjectURL(blobUrl);

}

})

},

标红的地方是重点,我这边要下载不同格式的文件,格式是前端这边来定的,后端不会告诉前端,然后我这边就只能通过传给后端接口的url的后缀名来匹配是什么格式的文件。

这时候遇到一个坑,接口通了  但是下载不了,上图

这里一定要在接口的地方加上responseType:'blob'这个属性,然后文件就可以下载下来了;

最后说一下  type 格式  可以去百度一下  然后自己写个js 进行匹配!

如何利用后端给的url,前端下载图片、音频、视频等文件相关推荐

  1. 浏览器下载图片 前端下载图片/音频/视频/PDF等所有浏览器可以解析的文件格式;解决通过window.open打开链接后是新标签页面而不是下载文件;

    拷贝走 放上文件路径 直接使用(存在跨域的处理下跨域问题即可) this.$axios.get('要下载的文件路径', { responseType: 'blob'}).then(res=>{ ...

  2. 后端返回一个url前端怎么把音视频文件下载下来

    后端返回一个url前端怎么把文件下载下来 最近做的项目有一个用腾讯云上传音视频的功能,在后台管理里面需要将音视频下载下来,后端是直接返回腾讯云视频url地址的, // 点击下载文件downloadFi ...

  3. Andrfoid 11 通过Glide下载图片音视频等文件,使用 MediaStore 和 ContentResolver 将文件保存到公共目录,跳过MANAGE_EXTERNAL_STORAGE权限

    fun downloadFile(url: String) {Glide.with(this).asFile().load(url).listener(object : RequestListener ...

  4. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

  5. 6种实现前端下载图片的方法汇总

    来源 | https://www.cnblogs.com/wanglinmantan/p/15088419.html 前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说 ...

  6. JavaScript 实现前端下载图片

    JavaScript 实现前端下载图片 前几天公司的项目有个需求,实现点击下载图片功能,当时我就想着还不简单嘛,当即写下以下代码: const download = document.createEl ...

  7. 前端下载base64格式视频

    前端下载base64格式视频 需求:后台传回base64格式视频,前端下载视频 一.base64转blob /*** base64 to Blob**/ export function base64t ...

  8. python web微信应用(五) 自动下载接收的图片/语音/视频/普通文件

    文章目录 前言 一.webwx 模块介绍 二.自动下载接收的图片/语音/视频/普通文件到本地 前言 本篇文章作为系列第五篇文章,将实现自动下载接收到的图片.语音.视频.普通文件的功能: 系列其它文章请 ...

  9. 利用jsoup 如何从网页中下载图片

    来自:http://www.open-open.com/bbs/view/1320576549952 如何从网页中下载图片 如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操 ...

最新文章

  1. 初识机器学习——吴恩达《Machine Learning》学习笔记(八)
  2. lr模型和dnn模型_建立ML或DNN模型的技巧
  3. arcgis数据量大显示慢_优化MapGIS地图显示速度我的七个方法
  4. 计算机实验报告protel,Protel99se实验报告.doc
  5. arcpy批量重命名
  6. 基于SSM医院预约管理系统
  7. ffmpeg 给视频添加字幕,在视频的某个时间段加入声音特效和动画
  8. 笔记本电脑开机黑屏没反应怎么办
  9. cpufreq 代码分析
  10. oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理
  11. 被遗忘的角落-CMMI的团队管理
  12. Introspector
  13. YY游戏云的AngularJS实践(转载)
  14. c语言地震子波6,地震子波显示及合成地震记录
  15. CQHMI品牌NR系列HMI人机界面在纺织机械设备行业中的应用
  16. 什么是认知?什么是认知科学?
  17. 安装Citrix Workspace报错提示NET Framework 4.6.2 or late:Error Code:5100
  18. 网站开发进阶(五十)IE浏览器JS调试方法详解
  19. CrownCAD首席技术官:梅敬成博士亮相中国国际软件发展大会(基于云架构的国产自主三维CAD平台——CrownCAD )
  20. 如何在神箭手云爬虫上写爬虫

热门文章

  1. 瑞盟MS2358 96KHz、24bit音频ADC芯片--DFN12 封装
  2. 租房合同中维修费需要谁出呢
  3. 【python】算术运算报错can‘t multiply sequence by non-int of type ‘float‘
  4. Andy’s First Dictionary(安迪的第一部词典)
  5. 关于h5使用高德地图,没有获取经纬度
  6. div html 下边加横线_css字体下边横线 html超链接更改颜色和去掉下划线
  7. 反算坐标方位角小程序(c#)
  8. 关于上下文映射看这篇就够了
  9. 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的
  10. Thanks, Steve Jobs!