toolFE

JS中的Blob和ArrayBuffer

2019-04-29  本文已影响0人  vinterx

Blob

Blob(binary large object),二进制类文件大对象,是一个可以存储二进制文件的“容器”,HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MIME类型。File接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

new Blob([data], {type: "application/octet-binary"})

Blob构造函数接受两个参数,第一个参数是一个包含实际数据的数组,第二个参数是数据的MIME类型。
Blob.size
blob对象的数据大小
Blob.type
表示blob对象所包含数据的MIME类型。如果实例化时未指明类型,则该值为空字符串。

图片选择与下载

    <input type="file" value="点我" id="inputImg" onchange="changeHandle(this)">
    <img id="image">

let changeHandle = (file) =>{
    var reader = new FileReader();
    reader.onload = function(evt){
        document.getElementById('image').src = evt.target.result;
        image = evt.target.result;
    }
    //  读Blob为base64
    reader.readAsDataURL(file.files[0]);
}

下载简例

let changeHandle = (file) =>{
    //  转化为url下载地址
    let url = URL.createObjectURL(file.files[0])
    let a = document.createElement('a')
    a.setAttribute('download', '图片')
    a.href = url
    a.click()
}

实战

axios.get('https://xxxxxx', {responseType: 'blob'})
.then(res => {
    let url = URL.createObjectURL(res.data)
    let a = document.createElement('a')
    a.setAttribute('download', '图片')
    a.href = url
    a.click()
})

window.URL.createObjectURL(),该方法接受File对象和Blob对象,
\color{red}{浏览器可支持打开的类型,如图片和PDF等已不能直接设置download属性下载,可通过这个方法进行下载。}

ArrayBuffer

ArrayBuffer对象表示内存中一段原始的二进制数据容器(缓冲区),具体介绍请参考以下链接。
http://javascript.ruanyifeng.com/stdlib/arraybuffer.html

总结

let blob = new Blob([1,2,3,4])
let reader = new FileReader();
reader.onload = function(result) {
    console.log(result);
}
reader.readAsArrayBuffer(blob);

ArrayBuffer => Blob

let blob = new Blob([buffer])
上一篇下一篇

猜你喜欢

热点阅读