记录-基于springboot+vue.js实现的超大文件分片极速上传及流式下载

一. 参考项目

基于springboot+vue.js实现的超大文件分片极速上传及流式下载,支持超大文件断点续传、秒传

软件架构
系统整体采用前后端分离开发,基于OpenJDK11版本:

前端:vue.js+elmentUI

后端:springboot+mybatis

数据库:mysql

工程管理工具:maven

https://gitee.com/luckytuan/fast-loader

在这里插入图片描述
该项目中上传模块采用了一个基于 simple-uploader.js 的 Vue 上传组件 vue-simple-uploader

github详解: https://github.com/simple-uploader/Uploader/blob/develop/README_zh-CN.md

详解博文基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

simple-uploader.js 和 vue-simple-uploader 的github地址分别如下:
simple-uploader.js
vue-simple-uploader 组件
参考github项目
在这里插入图片描述

在这里插入图片描述

二. 大文件分片上传

利用blob对象实现大文件分片上传
我们在进行文件上传的时候,因为服务器的限制,会限制每一次上传到服务器的文件大小不会很大,这个时候我们就需要把一个需要上传的文件进行切割,然后分别进行上传到服务器。
假如需要做到这一步,我们需要解决两个问题:
怎么切割?
怎么得知当前传输的进度?
首先解决怎么切割的问题。因为File文件对象是继承于Blob对象的,因此File文件对象也拥有slice这个方法,我们可以使用这个方法将任何一个File文件进行切割。
slice用于文件分片上传:
(1)分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。
(2)当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。
在这里插入图片描述

三. 上传文件时解压并获取压缩包内文件名的list

参考地址https://github.com/Maleficentt/jszip-in-vue
在这里插入图片描述

const zipFile = e.target.files[0]
const jszip = new JSZip()
jszip.loadAsync(zipFile).then((zip) => { // 读取zip
    for (let key in zip.files) { // 判断是否是目录
        if (!zip.files[key].dir) {
            if (/\.(png|jpg|jpeg|gif)$/.test(zip.files[key].name)) { // 判断是否是图片格式
                let base = zip.file(zip.files[key].name).async(
                    'base64') // 将图片转化为base64格式
                base.then(res => {
                    this.dataList.push({
                        fileName: zip.files[key].name,
                        type: 'img',
                        content: `data:image/png;base64,${res}`
                    })
                })
            }
            if (/\.(txt)$/.test(zip.files[key].name)) { // 判断是否是文本文件
                let base = zip.file(zip.files[key].name).async(
                    'string') // 以字符串形式输出文本内容
                base.then(res => {
                    this.dataList.push({
                        fileName: zip.files[key].name,
                        type: 'text',
                        content: res
                    })
                })
            }
        }
    }
})

版权声明:本文为qiao_qiao_happy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。