谈一谈开发网盘中碰到的问题(一)
谈一谈开发网盘中碰到的问题(一)
首先介绍一下项目:土星云企业网盘(http://www.saturncloud.com.cn/netdisk),一款基于vue+element ui面向企业和用户的人员管理和存储网盘。主要功能包含:文件、文件夹并行上传下载,复合文件(超过4G)的上传、下载。文件、文件夹分享功能,文件夹共享功能。文件、文件夹重命名、复制、移动功能。文件、文件夹批量删除、下载、移动功能。已删除文件、文件夹批量还原、彻底删除功能。上传下载列表展示功能。内部共享功能,公共资源功能。人员管理链接邀请成员功能。企业信息和产品套餐功能等。基本功能类似百度企业网盘。
本项目,上传采用的是ipfs分布式存储上传。感兴趣的童鞋可以了解一下。因为和传统的http上传下载不同,所以在前端处理上会用到许多知识点。首先,所有的上传下载都依赖以’Saturn Agent '命名的桌面客户端。不同的系统对应不同的客户端。
本项目文件上传可以概括为:
1.file_upload 检查内存是否充足
2.random 生成密钥(45位字符串,文件加密/解密密钥,multibase-Base58BTC编码)
3.pack(POST multipart/form-data) 将文件size,random返回值等作为参数,对原始文件进行处理,完成压缩、加密、切片。返回Multihash等值
4./ws/up 文件上传接口,将数据块、链接块 分发给不同的存储节点冗余编码计算(并行),生成 校验块 分发给不同的存储节点使用websocket协议反馈数据上传进度、速度信息。将pack返回的Multihash作为文件标识,socket更新的percent同步上传列表文件进度。为防止因网速等因素导致token失效,在同步进度同时要在socket推送过程中触发/combo/123请求来延长token
5.Add_file 服务器上传(普通文件is_dir传-1,文件夹传1,复合文件传2),ipfs上传完毕后将文件上传到服务器上。
由此,是一个普通文件的上传过程。如果选择多个文件的话,则循环重复上述操作。如果选择文件夹的话,则通过我自己封装的一个方法(后面会介绍)来判断如果是文件夹的话则is_dir传1,如果是文件的话依然重复上述操作。这里主要需要注意一个问题,选择上传的文件夹里面的文件、文件夹路径要跟最终页面上展示的一模一样。
Q1:浏览器解析文件夹files属性后返回的文件信息不满足或不好处理文件上传业务
处理方法:封装我需要的文件信息结构
let TREE = function (name, is_dir) {this.name = name;this.is_dir = is_dir;this.path = "";this.index;this.size;this.children = [];this.add = function (child) {this.children.push(child);};};var now_dir;var children;let root = new TREE(folder[0].webkitRelativePath.split("/")[0],1);for (var i = 0; i < folder.length; i++) {var folderPath = folder[i].webkitRelativePath.split("/");now_dir = root;for (var j = 1; j < folderPath.length - 1; j++) {var find_flag = 0;for (var k = 0; k < now_dir.children.length; k++) {if (now_dir.children[k].is_dir == 1)children = now_dir.children[k];else continue;if (children.name == folderPath[j]) {find_flag = 1;now_dir = children;break;}}if (find_flag == 0) {let new_dir = new TREE(folderPath[j], 1);now_dir.add(new_dir);now_dir = new_dir;}}let file = new TREE(folderPath[j], 0);file.path = folder[i].webkitRelativePath;file.index = folder[i];file.size = folder[i].sizenow_dir.add(file);}console.log(root)
分别打印选择文件、多文件、层级复杂文件夹封装前后的浏览器解析结构
单个文件
多个文件
文件夹封装前后对比
又到了快下班的时间,干饭去~
谈一谈开发网盘中碰到的问题(一)相关推荐
- 写在工作的第十年: 谈一谈专注和基础的重要性
写在工作的第十年: 谈一谈专注和基础的重要性 老帮菜的自我吐槽 不知不觉, 作为一个打工人, 作为一个写程序的打工人, 职业生涯的第十个年头悄然而至. 从一个充满雄心壮志的有志青年, 到如今有家有室的 ...
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- 有一群200w年薪的朋友是什么感觉?谈一谈入学中国科学院大学的几点感受吧
我叫阿广,偶尔正经,偶尔逗比,97年生人,在求学期间当过鸡头鸡尾,当过凤尾没当过凤头.大家如果想深入了解我,可以查看本公众号的原创文章. 技术人光有技术走不长久,所以今天不更新技术文章了,也给大家谈一 ...
- 先查询再插入的存储过程怎么写_谈一谈 InnoDB(1) - 底层存储文件结构
看技术文章是不是很累呢, 这次来个轻松点的~来谈一谈MySQL最主流的数据库引擎 InnoDB 吧~ 序 老王走进一号会议室, 随手打开了灯, 小张紧随其后 "王哥, 找我来干啥啊" ...
- 谈一谈我对本科计算机专业的认识
新的一年开始了,我大学的所有课程也刚刚结束不久,想一写篇文章谈一谈我对计算机专业的认识.博主学的专业是"计算机科学与技术",今年大四,三年半的校园生活使我对计算机专业的认知一次又一 ...
- 超市管理系统的html页面,基于WEB的超市管理系统_站内搜索_Web开发网
Web开发网 > 站内搜索 > 基于WEB的超市管理系统 系统ctrl+alt+del调出系统任务管理器后,发现没有用户选项卡,如下图 这是因为电脑上Windows用户登录或注销的方式配置 ...
- 谈一谈网络编程学习经验(陈硕)
作者:陈硕 原文地址:http://blog.csdn.net/solstice/article/details/6527585 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程& ...
- 黑大汇文楼计算机研究生,谈一谈我在黑龙江大学的复试经历
原标题:谈一谈我在黑龙江大学的复试经历 一.基本信息 本科院校:重庆理工大学,经济学专业,二本 目标院校:黑龙江大学,法律硕士(民商法方向) (备注:黑龙江大学法学院成立于1981年,历史悠久,法学院 ...
- 谈一谈网络编程学习经验
转自 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/ch ...
最新文章
- EasyDL桌面版发布!3天体验学习
- Spring boot使用Bootstrap
- 如何将javaweb项目部署到linux下
- 量子化学计算机理,几种化学反应机理的量子化学理论计算
- 拆分窗口QSplitter
- 剑指 Offer II 006. 排序数组中两个数字之和
- .NET Interop.SHDocVw和MSHTML引用如何操作
- Python结巴中文分词工具使用过程中遇到的问题及解决方法
- 联想服务器安装系统 F11,教你联想thinkpad系统还原f11一键恢复方法
- strconv,strings的学习(三)
- JDBC的一些API
- 如何提高学习欲--奖励机制
- shell遍历多个数组
- Mongodb 3.6安装过程(centos7.9)
- 使用copy con命令创建批处理文件
- 01 数学软件与建模---基础
- Windows10 官方原版镜像下载途径 Label:win10解决方案
- import org.apache.lucene.analysis.standard.StandardAnalyzer飘红
- 记一次解决Intel 9462无线网卡的笔记本安装Ubuntu16.04后无法连接WIFI问题的艰难历程
- 2021-08-07诺瓦科技面试
热门文章
- 疯狂!丈母娘让我用 Python 算领证吉日!
- lg g6 android 9,LG G6再无秘密:Android 7.0+18:9圆角屏
- 《百年捷克》读书笔记及读后感作文2200字
- Uni-app运行到mumu模拟器
- 综合实践活动信息技术小学版第三册电子课本_福建首个电子竞技专业为你开启电竞之路,圆你电竞梦想!——三明医学科技职业学院电子竞技运动与管理专业介绍...
- 容器技术及其应用白皮书(上)-- 容器技术
- 谷歌chromeos_谷歌新操作系统Fuchsia网站上线,同时支持手机和PC,鼓励开发者参与进来...
- 给服务器安装Anaconda遇到的问题和解决办法
- 智慧工地助力建筑行业长期健康发展
- 使用STM32点亮LED