利用blob 加密防下载

4 篇文章 0 订阅

一些网站的视频为了防止下载,通常会采用blob加密的做法;
其实这不是特殊的视频传输协议,只是一种 HTML5 Video Blob格式。
并且大部分网页视频的格式都是 m3u8。

参考的内容:

浏览器兼容
在这里插入图片描述
下面来简单说明一下怎么理解和操作:

读取

这里假设服务器上已经有一份文件,现在要前端加密展示,目录如下:
在这里插入图片描述
操作主要分为两部分:

1.后台读取文件,并转成二进制推送到前台

file_get_contents : 转为二进制内容
base64_encode: 对数据进行编码

<?php 
	header("Content-type:image/jpeg");
	echo base64_encode(file_get_contents('images/1.jpeg')); 
?>
2.前端读到二进制内容,转成blob格式,赋值到对应video

因为后台传输过来的只有后面的二进制内容,不包括标识符,
所以方法dataURLtoBlob 的参数中拼接了标识符: data:image/png;base64,
当然这里的拼接内容也可以后台直接返回

//读取内容
var fileUpload = function(_link,_type){
    	$.ajax({
	    	url: 'post.php',
	    	type:'post',
	    	success:function(req){
		        //请求成功时处理
		        $('img').attr('src',dataURLtoBlob('data:image/jpeg;base64,'+req));
		    },
	    })
    }
//base64 => blob
function dataURLtoBlob(dataurl) {
	    var arr = dataurl.split(',');
	    var mime = arr[0].match(/:(.*?);/);
	    var bstr = atob(arr[1]);
	    var n = bstr.length;
	    var u8arr = new Uint8Array(n);
	    var mime = mime[1];
	    while (n--) {
	        u8arr[n] = bstr.charCodeAt(n);
	    }
	    return window.URL.createObjectURL(new Blob([u8arr], { type: mime }));
	}

整个html内容:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
		img,video{width: }
	</style>
</head>
<body>
<input type="file" name="main" id="main" value="" accept="image/png, image/jpeg, image/gif, image/jpg" onchange="uploadImg(event)">
<input type="file" accept="video/*" id="video" name="video" onchange="uploadVideo(event)">
<video></video>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
    var fileUpload = function(_link,_type){
    	$.ajax({
	    	url: 'post.php',
	    	type:'post',
	    	success:function(req){
		        //请求成功时处理
		        $('img').attr('src',dataURLtoBlob('data:image/jpeg;base64,'+req));
		    },
	    })
    }
    function dataURLtoBlob(dataurl) {
	    var arr = dataurl.split(',');
	    var mime = arr[0].match(/:(.*?);/);
	    var bstr = atob(arr[1]);
	    var n = bstr.length;
	    var u8arr = new Uint8Array(n);
	    var mime = mime[1];
	    while (n--) {
	        u8arr[n] = bstr.charCodeAt(n);
	    }
	    return window.URL.createObjectURL(new Blob([u8arr], { type: mime }));
	}
    fileUpload();
</script>
</html>

在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Blob图片链接下载是指通过Blob对象的URL来下载图片。Blob(Binary Large Object)是一种二进制数据类型,可以用来存储大量的二进制数据,包括图片、音频、视频等。 要进行Blob图片链接下载,可以按照以下步骤进行操作: 1. 创建一个XMLHttpRequest对象或者使用fetch API来发送HTTP请求。 2. 使用GET方法请求服务器上的图片资源,并设置responseType为"blob",以获取二进制数据。 3. 在请求成功后,将返回的Blob对象转换为URL,可以使用URL.createObjectURL(blob)方法。 4. 创建一个a标签,并设置其href属性为Blob URL。 5. 设置a标签的download属性为图片的文件名,以便用户下载时保存为指定的文件名。 6. 将a标签添加到文档中,并模拟点击a标签来触发下载。 以下是一个示例代码: ```javascript function downloadImage(url, filename) { // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = function() { if (xhr.status === 200) { // 获取Blob对象 var blob = xhr.response; // 创建Blob URL var blobUrl = URL.createObjectURL(blob); // 创建a标签并设置属性 var a = document.createElement('a'); a.href = blobUrl; a.download = filename; // 添加a标签到文档中并模拟点击 document.body.appendChild(a); a.click(); // 清理Blob URL URL.revokeObjectURL(blobUrl); // 移除a标签 document.body.removeChild(a); } }; xhr.send(); } // 使用示例 var imageUrl = 'https://example.com/image.jpg'; var fileName = 'image.jpg'; downloadImage(imageUrl, fileName); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值