js如何通过链接下载一个视频(备忘)

downloadFile(fileurl, filename) {
				let _that = this;
				this.$http.defaults.timeout = 100 * 60 * 1000;
//fileurl 为视频地址
				this.$http.get(
					fileurl, {
						responseType: 'blob',
						onDownloadProgress(progress) {
							//_that.downProgress = Math.round(progress.loaded / progress.total * 100) + '%'
						}
					}
				).then(response => {
					let blob = response;
					if (typeof window.navigator.msSaveBlob !== 'undefined') {
						window.navigator.msSaveBlob(blob, filename)
					} else {
						let URL = window.URL || window.webkitURL;
						// 使用获取到的blob对象创建的blobUrl
						const blobUrl = URL.createObjectURL(blob);

						const a = document.createElement('a');

						if (typeof a.download === 'undefined') {
							window.location = blobUrl
						} else {
							document.body.appendChild(a)
							a.style.display = 'none'
							a.href = blobUrl;
							// 指定下载的文件名
							a.download = filename;
							a.click();
							document.body.removeChild(a)
							// 移除blob对象的blobUrl
							URL.revokeObjectURL(blobUrl);
						}
					}
					this.downloading = false;
				}).catch((error) => {
					//throw error;
					//this.$message({
					//	showClose: true,
					//	message: '下载失败,请重试..',
					//	type: 'error'
					//});
					//this.downloading = false;
				})
			},

this.$http为通过axios封装的函数  

坑为有跨域问题,需后端配合解决跨域

公司使用jq+vue的项目,所以还得来个jq的,代码半路接手,鬼知道前面人给设置了什么,jq的设置restype不起作用,无奈使用原生写法

	var xhr = new XMLHttpRequest()
	xhr.onreadystatechange = function () {
	    if (this.readyState == 4 && this.status == 200) {
	        // handler(this.response)
	        console.log(this.response, typeof this.response)
	        let blob = this.response;
	        		if (typeof window.navigator.msSaveBlob !== 'undefined') {
	        			window.navigator.msSaveBlob(blob, '下载文件.mp4')
	        		} else {
	        			let URL = window.URL || window.webkitURL;
	        			// 使用获取到的blob对象创建的blobUrl
	        			const blobUrl = URL.createObjectURL(blob);
	        		
	        			const a = document.createElement('a');
	        		
	        			if (typeof a.download === 'undefined') {
	        				window.location = blobUrl
	        			} else {
	        				document.body.appendChild(a)
	        				a.style.display = 'none'
	        				a.href = blobUrl;
	        				// 指定下载的文件名
	        				a.download = '下载文件.mp4';
	        				a.click();
	        				document.body.removeChild(a)
	        				// 移除blob对象的blobUrl
	        				URL.revokeObjectURL(blobUrl);
	        			}
	        		}
	    }
	}
	xhr.open('GET',url)
	xhr.responseType = 'blob'
	xhr.send()

这个也不用注释了...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1:教程概述 2:配置站点 3:jquery缩写 4:基本选择器1 5:基本选择器2 6:基本选择器3 7:基本选择器4 8:层次选择器1 9:层次选择器2 10:层次选择器3 11:层次选择器4 12:过滤选择器1 13:过滤选择器2 14:过滤选择器3 15:过滤选择器4 16:过滤选择器5 17:内容过滤选择器1 18:内容过滤选择器2 19:内容过滤选择器3 20:选择隐藏div 21:选择可见div 22:属性过滤 23:遍历集合 24:属性开始过滤 25:属性结尾过滤 26:组合选择 27:子元素过滤1 28:子元素过滤2 29:表单对象 30:下拉选项 31:选择器中的空格 32:表单选择器1 33:表单选择器2 34:选取单行文本框 35:统计差异 36:隔行改变背景 37:特殊符号 38:创建节点 39:追加节点1 40:追加节点2 41:插入节点1 42:插入节点2 43:删除节点1 44:删除节点2 45:参数删除 46:清空节点 47:克隆节点 48:替换节点1 49:替换节点2 50:包裹节点1 51:包裹节点2 52:wrapInner 53:属性操作 54:单个属性 55:多个属性 56:删除属性 57:添加样式 58:追加样式 59:样式覆盖 60:移除样式 61:样式切换 62:样式判断 63:获取html 64:设置html 65:设置value 66:搜索提示1 67:搜索提示2 68:取得子元素 69:获取紧邻元素 70:取得同辈元素 71:closest() 72:获取css 73:设置样式 74:设置透明度 75:offset 76:获取相对偏移 77:scrollTop 78:设置偏移 79:jquery事件 80:绑定事件 81:折叠和展开 82:隐藏和显示 83:事件合并 84:初始化样式 85:移除事件 86:事件冒泡 87:阻止冒泡 88:阻止默认行为 89:动画效果 90:slideDown 91:淡入淡出 92:幻灯片插件1 93:幻灯片插件2 94:幻灯片插件3 95:幻灯片插件4 96:时间轴插件 97:图表插件1 98:图表插件2 99:图表插件3 100:图表插件4 101:联动菜单1 102:联动菜单2 103:联动菜单3 104:联动菜单4 105:联动菜单5 106:联动菜单6 107:联动菜单7 108:联动菜单8 109:联动菜单9 110:联动菜单10 111:联动菜单11 112:联动菜单12 113:联动菜单13 114:联动菜单14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值