js 中的Blob类型

部署运行你感兴趣的模型镜像

js 中的Blob类型

简单记录,以备不时之需,大佬勿喷,多谢!(づ ̄3 ̄)づ╭❤~

Blob 是js 中的一种对象类型,主要用来存取二进制数据的。类似于File对象, File继承自Blob.

主要用途

最主要用途就是构建Blob对象,然后创建对象Url,然后赋值给标签或者使用xhr (XMLHttpRequest)进行下载

分片上传文件

这里主要说的是 File 对象, 因为是继承自Blob, 所以也可以算作是Blob对象特性

上传的例子:(来源于网络) 使用slice属性进行分片上传

function uploadFile(file) {
  var chunkSize = 1024 * 1024; //每片1M大小
  var totalSize = file.size;
  var chunkQuantity = Math.ceil(totalSize/chunkSize); //分片总数
  var offset = 0; //偏移量

  var reader = new FileReader();
  reader.onload = function(e) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", url);
    xhr.overrideMimeType("application/octet-stream");
    
    xhr.onreadystatechange = function() {
      if(xhr.readyState === 4 && xhr.status ===200) {
        ++offset;
        if(offset === chunkQuantity) {
          alert("上传完成");
        } else if(offset === chunkQuantity-1) {
          blob = file.slice(offset*chunkSize, totalSize);
          reader.readAsBinaryString(blob);
        } else {
          blob = file.slice(offset*chunkSize, (offset+1)*chunkSize);
          reader.readAsBinaryString(blob);
        }
      }else {
        alert("上传出错");
      }
    }

    if(xhr.sendAsBinary) {
      xhr.sendAsBinary(e.target.result);
    } else {
      xhr.send(e.target.result);
    }
  }
  var blob = file.slice(0, chunkSize);
  reader.readAsBinaryString(blob);
}

下载数据

可以通过创建Blob 对象的url 进行自定义数据的下载。

注意:建议在创建Blob 对象的时候指定文件类型

主要实现方式就是通过 创建数据的Blob对象,并创建其Url然后赋值给相应的 标签, 移除对应的url

可以根据具体需要,

  • 赋值给a标签 ,通过点击操作可以下载文件数据。
  • 赋值给img标签, 可以为其添加图片数据。

例如下面的,通过将图片数据转换为Blob Url并赋值给img达到加载图片的目的

图片数据上传的时候是File对象,所以可以直接创建对象URL

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="file" accept="image/*" onchange="handleFile(this)">
        <br/>
        <img style="width:100%;height:100%;" src="" alt="">

        <script>
            function handleFile(e) {
                console.log(e.files);
                var file = e.files[0];
                var blob = URL.createObjectURL(file);
                var img = document.getElementsByTagName("img")[0];
                img.src = blob;
                img.onload = function (e) {
                    URL.revokeObjectURL(this.src); //释放createObjectURL创建得对象
                }
            }
        </script>
    </body>
</html>

下面是通过创建Blob Url 从而达到下载文件的目的。

function createDownloadFile() {
      let content = "Blob Data";
      let blob = new Blob([content], "text/plain");
      let link = document.getElementsByTagName('a')[0];
      link.download = "file";
      link.href = URL.createObjectURL(blob);
    }

获取源数据

let blobUrl = URL.createObjectURL(new Blob(['Test'], {type: 'text/plain'}));
let xhr = new XMLHttpRequest();
//如果是指xhr.responseType = 'blob',将返回一个Blob对象,而不是文本;
//xhr.responseType = 'blob';
xhr.onload = function() {alert(xhr.responseText);}
xhr.open('get', blobUrl);
xhr.send();

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

在 JavaScript 中,`FileReader` 是用于处理 `Blob` 类型数据的重要工具,它提供了多种方法来读取 `Blob` 中的内容,以下是具体介绍: ### `readAsArrayBuffer()` 该方法用于开始读取指定的 `Blob` 中的内容,完成后,`result` 属性中保存的将是被读取文件的 `ArrayBuffer` 数据对象。示例代码如下: ```javascript var reader = new FileReader(); reader.addEventListener("loadend", function() { // reader.result 包含转化为类型数组的 blob console.log(reader.result); }); reader.readAsArrayBuffer(blob); ``` ### `readAsBinaryString()` 此方法会开始读取指定的 `Blob` 中的内容,完成后,`result` 属性中将包含所读取文件的原始二进制数据。示例如下: ```javascript const reader = new FileReader(); reader.onload = function() { const binaryData = reader.result; console.log(binaryData); }; reader.readAsBinaryString(blob); ``` ### `readAsDataURL()` 使用该方法开始读取指定的 `Blob` 中的内容,完成后,`result` 属性中将包含一个 `data: URL` 格式的 Base64 字符串以表示所读取文件的内容。示例代码: ```javascript function blobToBase64(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onloadend = () => { // result 包含 data URL,格式为 "data:[<mediatype>][;base64],<data>" resolve(reader.result.split(',')[1]); // 只取 base64 编码部分 }; reader.onerror = () => { reject(new Error('Error reading the Blob as Base64.')); }; reader.readAsDataURL(blob); }); } const text = 'Hello, world!'; const blob = new Blob([text], { type: 'text/plain' }); blobToBase64(blob).then(base64String => { console.log('Base64 String:', base64String); }).catch(error => { console.error('Error converting Blob to Base64:', error); }); ``` ### `readAsText()` 该方法用于将 `Blob` 内容作为文本读取,完成后,`result` 属性中将包含所读取文件的文本内容。示例如下: ```javascript const reader = new FileReader(); reader.onload = function() { const textContent = reader.result; console.log(textContent); }; reader.readAsText(blob); ``` ### `abort()` 该方法用于中止读取操作,在返回时,`readyState` 属性为 `DONE`。示例代码: ```javascript const reader = new FileReader(); reader.readAsArrayBuffer(blob); // 中止读取 reader.abort(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值