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

项目功能点

一、文件上传

相关对象
files:通过 input 标签读取的文件对象
blob:不可变的二进制内容,
formData:用于和后端传输的对象
fileReader:把文件读取为某种形式

  1. input 标签,type=file,选中文件后通过 e.target.files[0] 获取上传的文件 fileObj
  2. 读取文件,根据文件内容,借助第三方插件生成 md5(秒传、断点续传需要此步骤)
  3. 请求 文件检查接口,传入md5和文件名,检查服务端是否存在即将上传的文件(服务端比较 md5 有三种情况:1 存在 md5 且已经上传完成,服务端就自己复制一份,并返回成功标识,前端不需要再请求文件上传接口,实现文件秒传;2 如果存在 md5 ,但是文件还没有上传完成,就会返回文件上传成功的部分的位置给前端(断点续传);3 如果不存在 md5 标识没有上传过,服务端没有该文件,返回标识,前端从头开始上传
  4. 如果是 3 中的情况 2,前端拿到返回的文件上传成功部分的位置,从该位置开始切片进行上传
  5. 如果是 3 中的情况 3,前端就从文件开始的位置进行切片上传

切片上传:
6. files 对象和 blob 对象都可以通过文件的 fileObj.slice(start, end) 方法进行切片
7. 对文件内容根据文件size和切片的size,通过 slice 进行切片
8. 循环调用上传文件的接口,接口如参数就是 md5 值、fileName、file(切片内容)、offset(切片位置),每次循环完成以后,需要对切片位置进行计算

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、websocket

if(window.webSocket == undefined || window.webSocket == null) {// socket 地址var url = 'ws://' + websocketUrl + account;// 实例化 WebSocket 对象window.webSocket = new WebSocket(url);// 建立 WebSocket 连接window.webSocket.onopen = () => {_that.longstart(); // 成功建立连接后,创建心跳检测};// 前端获取到后端通过 onmessage 返回到数据window.webSocket.onmessage = (evt) => {_that.longstart(); //心跳重置}// 监听连接失败window.webSocket.onerror = () => {this.websocketonerror("webSocket.onerror")};// 监听连接关闭window.webSocket.onclose = () => {this.websocketonerror("webSocket.onclose")}
} else {this.retryNum ++;window.webSocket = nullthis.websocketonerror() //连接失败时,进行重连
}

websocketonerror() {this.retryNum <= 6 && this.connectWebSocket();  //失败、关闭重连
},
// 心跳检测
longstart() {//1、通过关闭定时器和倒计时进行重置心跳this.retryNum = 0;clearInterval(this.timeoutObj)clearTimeout(this.serverTimeoutObj);// 2、每隔10s向后端发送一条商议好的数据this.timeoutObj = setInterval(()=>{if(this.retryNum <= 6) {  //只允许重试6// console.log('监测心跳')let data='{"body": "pong","direct":"request"}'window.webSocket && window.webSocket.send(data);// 3、发送数据 5s后没有接收到返回的数据进行关闭websocket重连this.serverTimeoutObj = setTimeout(()=>{this.lockReconnect = true;this.retryNum ++;// console.log("后台挂掉,没有心跳了....,重试了"+this.retryNum+"次");if(window.webSocket) {window.webSocket.close();}}, 5000);} else {clearInterval(this.timeoutObj)clearTimeout(this.serverTimeoutObj);}},10000)
},
destroySocket() {if (window.webSocket) {window.webSocket.close(); // 离开路由之后断开websocket连接}clearInterval(this.timeoutObj);clearTimeout(this.serverTimeoutObj);
}
beforeDestroy() {this.lockReconnect = false;this.destroySocket();
},

三、如何做技术选型

  • 满足项目需求
  • 可控性,如果这个技术出现了 bug 是否有人可以解决
  • 成熟稳定(社区否活跃、配套插件是否完善、官方文档是否齐全、更新迭代以后功能是否可以兼容)
  • 易用性,学习成本

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 服务器磁盘扩容
  • [算法题]火星词典
  • Mysql-窗口函数二
  • 图的拓扑排序
  • RabbitMQ如何保证可靠性
  • 文档控件DevExpress Office File API v24.1 - 支持基于Unix系统的打印
  • 正则表达式扩展应用
  • Linux/C 高级——shell脚本
  • elasticsearch教程
  • 学习记录——day28 信号量集
  • 未来展望:PLC远程控制网关与工业物联网融合的发展趋势
  • 【Linux】系列入门摘抄笔记-4-查看文件内容命令cat/more/less/tail
  • web基础与http协议与配置
  • 美的神机后续
  • 【Datawhale AI夏令营第四期】 Datawhale AI夏令营第四期 魔搭-AIGC方向 Task01笔记
  • 230. Kth Smallest Element in a BST
  • Angular2开发踩坑系列-生产环境编译
  • Angular6错误 Service: No provider for Renderer2
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CentOS6 编译安装 redis-3.2.3
  • ES10 特性的完整指南
  • input的行数自动增减
  • Java 内存分配及垃圾回收机制初探
  • Python中eval与exec的使用及区别
  • React的组件模式
  • tab.js分享及浏览器兼容性问题汇总
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 关于使用markdown的方法(引自CSDN教程)
  • 诡异!React stopPropagation失灵
  • 简单数学运算程序(不定期更新)
  • 坑!为什么View.startAnimation不起作用?
  • 如何在 Tornado 中实现 Middleware
  • 软件开发学习的5大技巧,你知道吗?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习Vue.js的五个小例子
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 云大使推广中的常见热门问题
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云ACE认证学习知识点梳理
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Redis 入门到精通(一)数据类型(4)
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #APPINVENTOR学习记录
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (~_~)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (二)WCF的Binding模型
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (七)Knockout 创建自定义绑定
  • (十一)图像的罗伯特梯度锐化
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法