Electron中实现大文件上传和断点续传功能


Posted in Javascript onOctober 28, 2018

Electron官网的描述:Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。

从官网的描述我们可以简单的概括,Electron是开源的框架,可以使用h5来开发跨平台pc桌面应用,这样前端开发这可以开发桌面应用了。由于它是基于Chromium和Node.js开发的,所以在Electron中既可以使用浏览器中的api也可以使用node的api。

下面我们在Electron中实现文件的上传以及断点续传。网上关于h5的上传下载的案例已经非常多,但是关于大文件的上传和续传的很少。

首先上传方案,我们通过将大文件进行分片处理,将大文件切割成固定大小的分片。通过node的fs.createReadStream方法实现:

singleUpload function(file){
  let path = file.path; //文件本地路径 
  let stats = fs.statSync(path);//读取文件信息
  let chunkSize = 3*1024*1024;//每片分块的大小3M
  let size = stats.size;//文件大小
  let pieces = Math.ceil(size / chunkSize);//总共的分片数 
  function uploadPiece (i){ 
    //计算每块的结束位置
    let enddata = Math.min(size, (i + 1) * chunkSize);
    let arr = [];
    //创建一个readStream对象,根据文件起始位置和结束位置读取固定的分片
    let readStream = fs.createReadStream(path, { start: i * chunkSize, end: enddata-1 });
      //on data读取数据
      readStream.on(‘data‘, (data)=>{
        arr.push(data)
      }) 
      //on end在该分片读取完成时触发
      readStream.on(‘end‘, ()=>{
        //这里服务端只接受blob对象,需要把原始的数据流转成blob对象,这块为了配合后端才转
        let blob = new Blob(arr)
        //新建formdata数据对象
        var formdata = new FormData();
        let md5Val = md5(Buffer.concat(arr));
        formdata.append("file", blob);
        console.log(‘blob.size‘,blob.size)
        formdata.append("md5", md5Val);
        formdata.append("size", size + ‘‘); // 数字30被转换成字符串"30"
        formdata.append("chunk", i + ‘‘);//第几个分片,从0开始
        formdata.append("chunks", pieces + ‘‘);//分片数
        formdata.append("name", name);//文件名
        post(formdata)//这里是伪代码,实现上传,开发者自己实现
  }
}

以上代码就是上传的核心部分,我们首先读取文件的基本信息,如路径,大小进行分块,然后将每块上传,我们上传循环上传整个文件的分片,就循环调用uploadpiece方法。那么我们怎么实现断点续传呢?上面的代码中我们计算每块的md5值,这里计算每个md5值就是为了断点续传使用。我们每次上传文件前,我们会先调用预上传接口,预上传接口中,前端传入fileId,后端会将改文件已经上传的分块的md5数组传给前端,前端将该文件的分块的md5值和后端返回的md5值进行逐个对比,跳过已经上传的分块。这样就实现了大文件的上传和断点续传的问题。

方案流程图:

Electron中实现大文件上传和断点续传功能

总结

以上所述是小编给大家介绍的Electron中实现大文件上传和断点续传功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
showModelessDialog()使用详解
Sep 21 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
jQuery使用post方法提交数据实例
Mar 25 Javascript
简单讲解AngularJS的Routing路由的定义与使用
Mar 05 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
深入浅析vue-cli@3.0 使用及配置说明
May 08 Javascript
微信小程序系列之自定义顶部导航功能
May 21 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 #Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 #Javascript
深入浅析javascript函数中with
Oct 28 #Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 #Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 #Javascript
javascript中函数的写法实例代码详解
Oct 28 #Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 #Javascript
You might like
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
Python 编程速成(推荐)
2019/04/15 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
会议活动邀请函
2014/01/27 职场文书
2014年元旦活动方案
2014/02/15 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
离婚协议书范本
2015/01/26 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
Python实现简单得递归下降Parser
2022/05/02 Python