• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ai平台系统上传组件的集成适配vue-simple-uploader

武飞扬头像
zhangliming
帮助1

一、问题背景

当前整个ai平台的本地上传用户体验非常不友好,主要表现为上传速度过慢且服务端容易崩溃,没有上传速率的展示、已上传大小的显示、剩余时间的显示,缺少很多必要信息展示给用户,让用户不清楚当前上传的具体详细过程, 更是缺乏断点续传和妙传这些非常实用的功能。

二、问题分析

1.上传缓慢

由于是大文件上传,采用的分片上传的方式,老的方案是前端每次发送多个切片请求,中控服务端用一个单实例去接收,导致接收特别缓慢,还容易阻塞线程发生服务端崩溃的问题。需要考虑用一种处理数据效率高的方式去接受数据并能快速合并,推到,

2.上传速率,

目前很多主流的本地上传都支持上传速度的展示,由于我们没有监听每秒上传了多少片文件,不可能准确的知道上传的具体速度;

3.秒传和断点续传

要实现断点续传,就要知道每片文件的md5值,知道了每片并每次上传分片的时候把该文件的md5值传给服务端;由于当前本地上传逻辑中没有针对文件和分片文件的md5的计算,所以这种类似的功能没法实现;

秒传是指服务端已经有该文件了,在本地上传之前需要检测文件的md5值,将md5值传给服务端,服务端检测到已经有该文件的md5值,直接在服务端已经同步,不需要本地再上传;

三、解决方案

1.上传缓慢

由于是大文件上传,采用的分片上传的方式,老的方案是前端每次发送多个切片请求,中控服务端用一个单实例去接收,导致接收特别缓慢,还容易阻塞线程发生服务端崩溃的问题,现在的方案是单独部署一个服务端,采用多实例的线程去接前端发过来的请求,根据前端发过切片的数据和索引,插到指定的一段buffer中,当最后一片上传成功之后,合并传过来的文件,合并之后再把该文件推送到指定的文件服务器中。

2.上传速率

要实现上传速率这一功能,前端需要定期(每秒)监听该段时间内发送的了多少片给服务端,总的发送多少片数除以总的时间,就是每秒发送的片数,就是上传的速率,把这个值更新到file中,前端拿到这个值就可以直接展示对应的上传速率了;

3.秒传和断点续传

实现断点续传,必须要知道上传了多少片文件,我们知道每片文件的唯一确定值是md5,所以每次分片上传给服务端之前,需要先计算该片的md5值,这个md5值随着这一片传给后端,后端接受到这片文件和该片文件的md5值一起存下来,当我们点击暂定终止本地上传,此时服务端会记录已经上传的每一片文件的md5和整个文件的md5,当再次点击续传的时候,会先发送一个请求去判断服务端有没有此文件,如果已经有文件了只是文件并不是一个完整的文件,是一些分片的文件,此时会返回给前端已经上传文件的md5和索引信息,前端接受到这些信息之后,会过滤掉这些已经上传的分片文件,把余下的片文件信息传给服务端,当上传完最后一片文件时,服务就拿到了整个完整文件,自此断点续传整个功能就实现了 秒传实现方案和断点续传类似,比断点续传还要简单一些,

4.大文件上传的完整流程设计

学新通

四、集成步骤

1.拉代码

拉取it-uiue代码  <git@git.iflytek.com:CBG_AI_Cloud2.0/it-uiue>  切换到feature/dev分支下,如果有新增平台级公共组件,从feature/dev分支下新建自己的分支,修改后合并到feature/dev分支。

代码拉取成功后,打开本地项目,在webpack.base.config.js中,找到如图位置,是本地启动则将本地运行的代码注释去掉,如果是直接集成样式,则将打包运行的代码注释打开,注释掉本地运行的代码。

学新通

2.拷贝代码

在项目下执行npm run build命令, 找到dist目录下的it-uiue文件夹,复制到平台项目中的assets目录下,在it-uiue文件夹下

学新通

3.引入路径

//
`import Input from ``'@/assets/it-uiue/components/uploadNew/uploader'`

4.本地上传组件引入注意区分

学新通

1.uploader组件不带上传进度条,进度条展示在另一个弹窗里面

2.uoloaderProgress本地上传组件带进度条

5.上传组件下载

5.1 npm下载vue-simple-uploader和spark-md5

npm install vue-simple-uploader@0.7.6 spark-md5@3.0.2 -S

5.2 注册全局组件

import uploader from 'vue-simple-uploader';

Vue.use (uploader);

6.组件引用 1.组件直接导入替换去掉旧的组件导入

import resumable from "@/assets/it-uiue/components/uploadNew/uploader";

2.修改最新上传服务端地址

//上传地址
target: `${$.defaults.baseURL.replace(
          "/deeplearn-server/",
          "/common-server/"
        )}/file/upload`,
        
//取消上传地址
cancelTarget: `${$.defaults.baseURL.replace(
          "/deeplearn-server/",
          "/common-server/"
        )}/file/cancelUpload`,

五、效果展示

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbaieg
系列文章
更多 icon
同类精品
更多 icon
继续加载