当前位置: 首页 > news >正文

js和nodejs如何将文件切片和合并

 nodejs进行文件切片合并

使用nodejs读取文件流,并对流进行切片合并等操作,就需要用到Buffer对象,可对文件流进行切片,并合并。

const fs = require('fs')// 读取一个文件,使用fs读取文件获取一个Buffer类型数据
const buffer = fs.readFileSync('./test.mp4')// 将文件进行切分
const file1 = buffer.subarray(0,3000000)
const file2 = buffer.subarray(3000000)// 全并多个切片文件
const allfile = Buffer.concat([file1,file2])// 读取文件切片
const s1 = fs.readFileSync('./test_s1.mp4')
const s2 = fs.readFileSync('./test_s2.mp4')// 将读取的文件切片合并
const bb = Buffer.concat([s1,s2])// 将合并的切片数据,写到一个新文件中
fs.writeFileSync('./test2.mp4',bb)

 js进行文件切片合并

如果想在页面上操作文件,就需要使用到与文件相关的API接口,如Blob、File、FileList、FileReader、FileReaderSync,这几个就是操作文件常见的接口。

Blob是实现文件切片的一个核心接口,因为它是一个不可变的类文件对象,可以使用Blob本身的slice方法,对文件本身进行切片。

<html lang="zh-cn"><head><meta title="文件切片合并" />
</head><body><!-- 页面选择文件 --><input type="file" id="file"/><!-- 将加载的视频文件进行切片后合并,并播放 --><video id="play" controls style="width:500px;height:auto"></video>
</body>
<script>file.addEventListener('change',async (e)=>{// 获取FileList中的File文件let file2 = file.files[0]// ----------第一种方式-------------------// 使用Blob的slice方法切片,使用Blob构造函数进行数据合并// 将加载的文件进行切片// let s1 = file2.slice(0,100)// let s2 = file2.slice(100)// 将切片的文件进行数据合并// let newFile = new Blob([s1,s2])// -----------第二种方式------------------// 如何对大文件进行流式读取let chunckArr = []// 通过Blob获取 ReadableStream 流对象,再获取可读的流读取器let reader =  file2.stream().getReader()let done = falsewhile(!done){// 使用流读取器的read方法,获取流队列中的下一个分块数据let {value,done: readDone} = await reader.read()console.log(value)chunckArr.push(value)done = readDone}// 通过Blob构造函数合并流数据let newFile = new Blob(chunckArr)// 进行页面播放play.setAttribute('src',URL.createObjectURL(newFile))})</script>
</html>

http://www.lryc.cn/news/120307.html

相关文章:

  • Java内存模型
  • [国产MCU]-BL602开发实例-看门狗定时器(WDG)
  • 28 | Boss直聘数据分析
  • Hash 缓存
  • 腾讯云CVM服务器标准型S5性能CPU处理器测试
  • 【左神算法刷题班】第16节:累加和为k的数组、逆序对问题、约瑟夫环问题
  • 【React | 前端】在React的前端页面中,判断某个变量值是否被定义?根据是否定义显示不同的内容?
  • 机器学习深度学习——seq2seq实现机器翻译(数据集处理)
  • 锁定Mac的内置键盘,防止外接键盘时的误触
  • 由于找不到d3dx9_42.dll,无法继续执行代码。重新安装程序可能会解决此问题
  • 解决Vue+Element UI使用el-dropdown(下拉菜单)国际化时菜单label信息没有刷新的情况
  • Prometheus技术文档-概念
  • JQuery判断radio(单选框)是否选中和获取选中值方法总结
  • Effective Python 读书笔记
  • Monge矩阵
  • (5)所有角色数据分析页面的构建-5
  • 专利进阶(三):专利撰写资料汇总
  • maven编译始终提示无效的目标发行版的解决方法
  • 系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】
  • 界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!
  • 【网络安全】等保测评安全物理环境
  • Intellij IDEA 导入 eclipse web 项目详细操作
  • 安卓java A应用切换到B应用,来回切换不执行OnCreate
  • 【Linux】批量恢复文件权限
  • 数据可视化(八)堆叠图,双y轴,热力图
  • 前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理
  • 基于SLAM的规划算法仿真复现|SLAM|智能规划
  • sqlite3多线程操作问题
  • ACCESS数据库增删改查
  • 动捕系统mockup_optitrack替换为VRPN传递信息