如何将读取文件得到的Buffer拆分为10MB大小的分片用于服务端上传
Buffer 拆分为 10MB 分片实现方案
10MB 对应的字节数为 10 * 1024 * 1024 = 10485760,Node.js 原生 Buffer 自带的 slice 方法的操作单位就是字节,无需额外转换类型即可直接完成分片。
可直接运行的实现代码
const fs = require('fs') // 固定分片大小为10MB,单位为字节 const CHUNK_SIZE = 10 * 1024 * 1024 const fileBuffer = fs.readFileSync('替换为你的实际文件路径') const totalSize = fileBuffer.byteLength const chunkList = [] let currentOffset = 0 while (currentOffset < totalSize) { // 处理最后一个分片不足10MB的情况 const endOffset = Math.min(currentOffset + CHUNK_SIZE, totalSize) const singleChunk = fileBuffer.slice(currentOffset, endOffset) chunkList.push(singleChunk) currentOffset = endOffset } // 遍历分片列表即可逐个上传 chunkList.forEach((chunk, idx) => { console.log(`分片${idx + 1}大小:${chunk.byteLength}字节`) // 此处写入上传分片的逻辑 })
原尝试代码的问题说明
- 无需将 Buffer 转换为 Uint16Array:Uint16Array 每个元素占2个字节,长度计算和字节数不匹配,反而会增加复杂度和出错概率
slice方法的第二个参数直接按偏移量叠加分片大小计算即可,只需注意最后一个分片的结束位置不能超过文件总字节数
内容的提问来源于stack exchange,提问作者m-0-h
相关产品推荐
相关产品推荐

