时间:2021-05-28
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中实现大文件上传和断点续传功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。一.两个必要响应头Accept-Ranges、ET
php实现断点续传,就需要把大文件分割成多个小文件,然后单个上传。传完后在合并。│merge.php–合并文件脚本│merge.zip–合并后文件│socket
技术栈前端用了React,后端则是EggJs,都用了TypeScript编写。断点续传实现原理断点续传就是在上传一个文件的时候可以暂停掉上传中的文件,然后恢复上
最近在给我的开源下载框架Aria增加FTP断点续传下载和上传功能,在此过程中,爬了FTP的不少坑,终于将功能实现了,在此把一些核心功能点记录下载
Android断点续传原理以及实现0.前言在Android开发中,断点续传听起来挺容易,在下载一个文件时点击暂停任务暂停,点击开始会继续下载文件。但是真正实现起