Blob的三种应用场景及Blob,url,base64之间的转换

7 篇文章 0 订阅
5 篇文章 0 订阅

Blob是一种Javascript的对象类型,兼容到IE10

Blob 对象表示一个不可变、原始数据的类文件对象。

Blob 表示的不一定是JavaScript原生格式的数据。

File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

       file 对象只是 blob 对象的一个更具体的版本,blob 存储着大量的二进制数据,并且 blob 的 size 和 type 属性,

       都会被 file 对象  所继承

File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReaderURL.createObjectURL()createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File

Blob对象可以看做是存放二进制数据的容器,此外还可以通过Blob设置二进制数据的MIME类型。

创建Blob对象:

let blob = new Blob(["Hello World!"],{type:"text/plain"});

参数1:数据序列,任意格式的值   例如,任意数量的字符串,Blobs 以及 ArrayBuffers;

参数2:创建Blob对象的选项,有两个:

              type -- MIME 的类型。

               endings -- 决定 append() 的数据格式,(数据中的 \n 如何被转换)可以取值为 "transparent" 或者 "native"

                                                                                                     (t* 的话不变,n* 的话按操作系统转换;t* 为默认) 。                                                              

Blob,url, base64之间的转化:

Blob和url

//Blob转化为url,必须接受Blob对象
var url = window.URL.createObjectURL(‘必须是Blob,File或MediaSource对象’);

//URL.createObjectURL()
//返回一个DOMString ,包含一个唯一的blob链接(该链接协议为以blob:,
//后跟唯一标识浏览器中的对象的掩码)。
//URL.revokeObjectURL()
//销毁之前使用URL.createObjectURL()方法创建的URL实例。

//注:URL对象不兼容低版本浏览器

dataURL转换为Blob对象  dataURL转换为File对象

dataUrl =>截取出base64部分=> Uint8Array()转化 => charCodeAt()转化 => new Blob

function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
}
function dataURLtoFile(dataurl, filename) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, {type:mime});
}

Blob转为base64

function blobToDataURL(blob, callback) {
    let a = new FileReader();
    a.onload = function (e) { callback(e.target.result); }
    a.readAsDataURL(blob);
}

Blob的三种应用场景

1,分片上传  Blob.slice(start:number, end:number, contentType:string)

2,隐藏视频直链  

3,通过url下载文件

分片上传demo:

var BYTES_PER_CHUNK = 1024 * 1024; // 每个文件切片大小定为1MB .
var blob = document.getElementById("file").files[0];
var slices = Math.ceil(blob.size / BYTES_PER_CHUNK);
var blobs = [];
slices.forEach(function(item, index) {
    blobs.push(blob.slice(index,index + 1));
});

隐藏视频连接

var video = document.getElementById("bgvid");
window.URL = window.URL || window.webkitURL;
var xhr = new XMLHttpRequest();
xhr.open("GET", "images/mp4.mp4", true);
xhr.responseType = "blob";
xhr.onload = function() { if (this.status == 200) { var blob = this.response;
video.onload = function(e) { window.URL.revokeObjectURL(video.src); };
video.src = window.URL.createObjectURL(blob); } }
xhr.send();

下载文件:

createDownload("download.txt","download file");

function createDownload(fileName, content){
    var blob = new Blob([content]);
    var link = document.createElement("a");
    link.innerHTML = fileName;
    link.download = fileName;
    link.href = URL.createObjectURL(blob);
    document.getElementsByTagName("body")[0].appendChild(link);
}

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的Blob、File和Base64都是处理文件或数据的常用对象。下面将介绍它们的使用场景以及相互之间转换Blob对象用于表示不能被修改的类文件数据,并且可以在被发送到服务器之前进行处理。它可用于在网页上生成和下载文件,比如将网页上的图片存储为Blob对象,然后使用URL.createObjectURL()方法将其显示为图像。此外,Blob对象也可以用于通过XMLHttpRequest或Fetch API将数据发送到服务器。 File对象继承自Blob对象,它是用户在表单中选择的文件的表示形式。File对象可以包含文件的名称、大小、类型以及最后修改日期等信息。在上传文件时,我们通常会使用File对象来获取文件的详细信息并进行验证。 Base64是一种将二进制数据编码为ASCII字符的方式,常用于在文本传输中表示二进制数据。我们可以使用JavaScript的btoa()和atob()函数在Base64字符串和二进制数据之间进行相互转换。 在相互转换方面,可以将Blob对象转换Base64字符串,然后使用toDataURL()方法将其转换为DataURL,或者使用FileReader对象的readAsDataURL()方法将Blob或File对象转换为DataURL。而将Base64字符串转换Blob对象,则可以使用Blob构造函数并设置正确的MIME类型。 综上所述,Blob对象适用于处理类文件数据和发送到服务器,File对象适用于处理用户上传的文件,而Base64适用于在文本传输中表示二进制数据。根据具体的应用场景和需求,我们可以进行这三种对象之间的相互转换

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值