sf-utils2 sf-utils2
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
  • 快速开始

  • 基础-Base

  • 对象-Object

  • 数组-Array✨✨✨

  • 方法-Function

  • 字符串-String

  • 数学-Math

  • 文件-Buffer

    • 序言
    • arrayBufferToBase64【ArrayBuffer转Base64】
    • arrayBufferToText【ArrayBuffer读取文本】
    • base64ToArrayBuffer【Base64转ArrayBuffer】
    • base64ToBlob【Base64转Blob】
    • blobToArrayBuffer【Blob转ArrayBuffer】
      • 1.示例
      • 2.入参说明
      • 2.1.BlobToArrayBufferOptions 说明
      • 3.源码
    • blobToBase64【Blob转Base64】
    • blobToText【Blob转文本】
    • encodeTextByArrayBuffer【ArrayBuffer对象转化加密后的文本】
    • decodeTextByArrayBuffer【ArrayBuffer对象解密密后的文本】
    • textToArrayBuffer【文本转成ArrayBuffer对象】
    • textToBlob【文本转成Blob对象】
  • 节点-dom

  • 拓展

  • nodejs

目录

blobToArrayBuffer【Blob转ArrayBuffer】

描述

主要是将Blob转化为ArrayBuffer v3.3.2+

# 1.示例

<template>
  <div class="col-md-9 col-sm-12">
    <input type="file" @change="onChangeFile" accept="image/*" />
  </div>
</template>

<script>
import { blobToArrayBuffer } from 'sf-utils2'

export default {
  data() {
    return {}
  },

  methods: {
    // 打开ie
    async onChangeFile(e) {
      const file = e.target.files[0]
      this._arrayBuffer = await blobToArrayBuffer(file, { mimeType: file.type })
      console.log('blobToArrayBuffer转化输出结果 ===>', this._arrayBuffer)
      this.$message.warning(`打开控制台查看`)
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 2.入参说明

参数 说明 类型 是否必填 默认值
blob Blob 对象 Blob 是
options 选项 BlobToArrayBufferOptions ,详情见下 👇 否

# 2.1.BlobToArrayBufferOptions 说明

参数 说明 类型 是否必填 默认值
mimeType MimeType 类型 string 否
`MimeType`类型,点击查看
export interface BlobToArrayBufferOptions {
  /** 分片大小, 如果不传入那么将整个一起读取,这样可能导致内存过大, 单位MB */
  chunkSize?: number

  /** */
  mimeType?: string
}
1
2
3
4
5
6
7
显示代码 复制代码 复制代码

# 3.源码

import isFunction from '@/base/isFunction'

export interface BlobToArrayBufferOptions {
  /** 分片大小, 如果不传入那么将整个一起读取,这样可能导致内存过大, 单位MB */
  chunkSize?: number

  /** */
  mimeType?: string
}

/**
 * blob 转 arrayBuffer
 * @param {Blob} blob
 * @param options
 */
async function blobToArrayBuffer(blob: Blob, options?: BlobToArrayBufferOptions): Promise<ArrayBuffer> {
  if (!(blob instanceof Blob)) return Promise.reject('传入的参数blob非Blob对象')

  // 读取全部
  if (!options?.chunkSize) return await _singleBlobToArrayBuffer(blob)

  // 分片读取
  const ONE_MB = 1024 * 1024
  const CHUNK_SIZE = +options?.chunkSize * ONE_MB
  const chunkArrayBuffers = [] as ArrayBuffer[]
  for (let start = 0; start < blob.size; start += CHUNK_SIZE) {
    const chunk = blob.slice(start, start + CHUNK_SIZE)
    const chunkBuffer = await _singleBlobToArrayBuffer(chunk)
    chunkArrayBuffers.push(chunkBuffer)
  }
  return _mergeArrayBuffers(chunkArrayBuffers)
}

/**
 * 单个 blob 转 arrayBuffer
 * @param blob
 */
async function _singleBlobToArrayBuffer(blob: Blob): Promise<ArrayBuffer> {
  if (!(blob instanceof Blob)) return Promise.reject('传入的参数blob非Blob对象')
  if (isFunction(blob.arrayBuffer)) {
    return await blob.arrayBuffer()
  }
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.onload = () => resolve(reader.result as ArrayBuffer)
    reader.onerror = e => reject(e)
    reader.readAsArrayBuffer(blob)
  })
}

/**
 * 合并 ArrayBuffer 的函数
 * @param buffers
 */
function _mergeArrayBuffers(buffers: ArrayBuffer[]) {
  // 计算总长度
  let totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0)
  // 创建新缓冲区
  const mergedBuffer = new ArrayBuffer(totalLength)
  const mergedUint8 = new Uint8Array(mergedBuffer)

  // 逐块复制数据
  let offset = 0
  for (const buffer of buffers) {
    const chunkView = new Uint8Array(buffer)
    mergedUint8.set(chunkView, offset)
    offset += chunkView.length
  }
  return mergedBuffer
}
export default blobToArrayBuffer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
上次更新: 2025/07/01, 14:52:29
base64ToBlob【Base64转Blob】
blobToBase64【Blob转Base64】

← base64ToBlob【Base64转Blob】 blobToBase64【Blob转Base64】→

Theme by Vdoing | Copyright © 2022-2025 bianpengfei
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×