如何利用后端给的url,前端下载图片、音频、视频等文件
后端给了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,前端下载图片、音频、视频等文件相关推荐
- 浏览器下载图片 前端下载图片/音频/视频/PDF等所有浏览器可以解析的文件格式;解决通过window.open打开链接后是新标签页面而不是下载文件;
拷贝走 放上文件路径 直接使用(存在跨域的处理下跨域问题即可) this.$axios.get('要下载的文件路径', { responseType: 'blob'}).then(res=>{ ...
- 后端返回一个url前端怎么把音视频文件下载下来
后端返回一个url前端怎么把文件下载下来 最近做的项目有一个用腾讯云上传音视频的功能,在后台管理里面需要将音视频下载下来,后端是直接返回腾讯云视频url地址的, // 点击下载文件downloadFi ...
- Andrfoid 11 通过Glide下载图片音视频等文件,使用 MediaStore 和 ContentResolver 将文件保存到公共目录,跳过MANAGE_EXTERNAL_STORAGE权限
fun downloadFile(url: String) {Glide.with(this).asFile().load(url).listener(object : RequestListener ...
- 前端下载图片的N种方法
前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...
- 6种实现前端下载图片的方法汇总
来源 | https://www.cnblogs.com/wanglinmantan/p/15088419.html 前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说 ...
- JavaScript 实现前端下载图片
JavaScript 实现前端下载图片 前几天公司的项目有个需求,实现点击下载图片功能,当时我就想着还不简单嘛,当即写下以下代码: const download = document.createEl ...
- 前端下载base64格式视频
前端下载base64格式视频 需求:后台传回base64格式视频,前端下载视频 一.base64转blob /*** base64 to Blob**/ export function base64t ...
- python web微信应用(五) 自动下载接收的图片/语音/视频/普通文件
文章目录 前言 一.webwx 模块介绍 二.自动下载接收的图片/语音/视频/普通文件到本地 前言 本篇文章作为系列第五篇文章,将实现自动下载接收到的图片.语音.视频.普通文件的功能: 系列其它文章请 ...
- 利用jsoup 如何从网页中下载图片
来自:http://www.open-open.com/bbs/view/1320576549952 如何从网页中下载图片 如果做为爬虫很有必要从网页中下载图片到本地,那么我们利用jsoup来进行该操 ...
最新文章
- 初识机器学习——吴恩达《Machine Learning》学习笔记(八)
- lr模型和dnn模型_建立ML或DNN模型的技巧
- arcgis数据量大显示慢_优化MapGIS地图显示速度我的七个方法
- 计算机实验报告protel,Protel99se实验报告.doc
- arcpy批量重命名
- 基于SSM医院预约管理系统
- ffmpeg 给视频添加字幕,在视频的某个时间段加入声音特效和动画
- 笔记本电脑开机黑屏没反应怎么办
- cpufreq 代码分析
- oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理
- 被遗忘的角落-CMMI的团队管理
- Introspector
- YY游戏云的AngularJS实践(转载)
- c语言地震子波6,地震子波显示及合成地震记录
- CQHMI品牌NR系列HMI人机界面在纺织机械设备行业中的应用
- 什么是认知?什么是认知科学?
- 安装Citrix Workspace报错提示NET Framework 4.6.2 or late:Error Code:5100
- 网站开发进阶(五十)IE浏览器JS调试方法详解
- CrownCAD首席技术官:梅敬成博士亮相中国国际软件发展大会(基于云架构的国产自主三维CAD平台——CrownCAD )
- 如何在神箭手云爬虫上写爬虫
热门文章
- 瑞盟MS2358 96KHz、24bit音频ADC芯片--DFN12 封装
- 租房合同中维修费需要谁出呢
- 【python】算术运算报错can‘t multiply sequence by non-int of type ‘float‘
- Andy’s First Dictionary(安迪的第一部词典)
- 关于h5使用高德地图,没有获取经纬度
- div html 下边加横线_css字体下边横线 html超链接更改颜色和去掉下划线
- 反算坐标方位角小程序(c#)
- 关于上下文映射看这篇就够了
- 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的
- Thanks, Steve Jobs!