Blob、File、FileList

301 阅读3分钟

Blob

Blob对象表示不可变的原始二进制数据。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作

创建Blob对象

new Blob(sources: (Blob | BinaryLike)[], options?: BlobOptions | undefined): Blob

sources 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会返回一个 Blob。

option指定如下两个属性

  • type blob 中的数组内容的 MIME 类型。

  • encoding 编码格式

    let str = ['asdf']; // 一个包含 DOMString 的数组
    let blob = new Blob(str, {type : 'text/plain'}); // 得到 Blob实例对象
    console.log(blob);//Blob { size: 4, type: 'text/plain' }

Blob 实例属性

size Blob 对象中所包含(字节)数。

    console.log(blob.size) //4

type Blob 对象中包含数据的 MIME 类型。

    console.log(blob.size)//text/plain

Blob 实例方法

arrayBuffer()

方法返回一个 Promise 对象,包含 blob 中的数据,并在 ArrayBuffer 中以二进制数据的形式呈现。

    blob.arrayBuffer().then(res=>{
        console.log(res) //ArrayBuffer { [Uint8Contents]: <31 32 33 34 35 36>, byteLength: 6 }
    })

slice()

创建一个包含源 Blob的指定字节范围内的数据的新 Blob 对象

    console.log(blob.slice(0,2,"text/html"));//Blob { size: 2, type: 'text/html' }

stream()

返回一个ReadableStream对象,读取它将返回包含在Blob中的数据

    let stream = blob.stream();
    console.log(stream)  //ReadableStream { locked: false, state: 'readable', supportsBYOB: false }、
    1. getReader() //返回的 stream 上获取一个对象
        // ReadableStreamDefaultReader {
        //     stream: ReadableStream { locked: true, state: 'readable', supportsBYOB: false },
        //     readRequests: 0,
        //     close: Promise { <pending> }
        // }
    2. 调用read()//方法读取blob对象
    stream.getReader().read().then(res=>{
        console.log(res.value);
        let f=Buffer.from(res.value)
        console.log(f.toString());
    })

text()

方法返回一个 Promise 对象,包含 blob 中的内容 使用 UTF-8 格式编码 不可以更改编码格式

    blob.text().then(res => {
         console.log(res);//123456
    })

File

简介:

File File 接口基于 Blob,继承了 Blob 的功能并将其扩展以支持用户系统上的文件。 通常情况下, File 对象是来自用户在一个 元素上选择文件后返回的 FileList 对象,也可以是来自由拖放操作生成的 DataTransfer 对象,或者来自 HTMLCanvasElement 上的 mozGetAsFile() API。 File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReader, URL.createObjectURL(), createImageBitmap() (en-US), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

注意: File 对象中只存在于浏览器环境中,在 Node 环境不存在!!

创建对象

new File(data,name,option?)

data 一个包含ArrayBuffer,ArrayBufferView,Blob,或者 DOMString 对象的 Array — 或者任何这些对象的组合。这是 UTF-8 编码的文件内容。

name 表示文件名称,或者文件路径

options

  • type MiMe类型
  • lastModified 文件最后修改时间
    /**
    * 
    * File{
            lastModified: 1675994362306       最后修改时间
            lastModifiedDate: Fri Feb 10 2023 09:59:22 GMT+0800 (中国标准时间) {}   !弃用
            name: "arr"                       表示的文件的名称
            size: 9                           文件大小
            type: ""                          MIME Type文件类型
            webkitRelativePath: ""            非标准: 该特性是非标准的,尽量不要在生产环境中使用它!
        }
    * 
    */
    var file = new File([456,789,123], "arr");
    console.log(file)

FileList

一个 FileList 对象通常来自于一个 HTML input 元素的 files 属性,你可以通过这个对象访问到用户所选择的文件。该类型的对象还有可能来自用户的拖放操作

     <input type="file" name="File" id="File" accept=".doc,.docx,.pdf,.ai,.psd,.jpg" multiple="multiple"
        onchange="change(event)">
    const fileDom = document.querySelector('#File');
        function change(e) {
            if (e.target.files[0].size > 500 * 1024 * 1024) { // 限制文件上传大小
                alert("文件不能大于500M")
            } else {
                console.log(e);
                // 文件赋值
                let file = e.target.files //FileList  [File...]
                console.log(e.target);
            }
        }

实例属性

length 返回FileList集合长度

实例方法

item(index) 返回FileList集合index处File对象

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4天,点击查看活动详情