javaweb网盘SSM

前端:html/css/js+jQuery+Angular+Bootstrap 后台 ssm 数据库 mysql 需求 文件上传 上传本地文件

本文包含相关资料包-----> 点击直达获取<-------

前端:html/css/js+jQuery+Angular+Bootstrap

后台 ssm

数据库 mysql

需求

文件上传

上传本地文件,支持秒传、断点上传功能、分块上传功能。

秒传功能前端采用spark-md5.js计算文件的md5,与网盘数据库中的文件md5对比来实现 秒传。

断点上传和分块上传类似,在客户端上传时,将大于40MB的文件按照每40MB为一块 为单位拆分为多块。后台建立索引关联这些文件块。 同时后台会记录当前的上传 字节数,发生异常时,记录该值。以便下次可以跳过n个byte进行上传。

文件下载

下载网盘中的文件,支持文件的断点下载功能。

同断点上传类似。

好友管理

添加分组、添加好友。同时可以将分享给好友。

消息管理

使用WebSocket实现消息主动推送。

权限管理

使用过滤器和Spring的AOP实现权限控制。 (Shiro)

文件管理

支持文件删除、重命名、移动、新建文件夹等功能。

第三方登录

手机验证

一、界面

二、数据库设计

用户表 users

  • id 这里使用UUID

  • username

  • phone
  • password
  • register_time
  • login_time
  • headimg_path

第三方登录 user_third

  • id # 自增id
  • user_id # users表对应的id
  • identity_type # 身份类型(站内username 邮箱email 手机mobile 或者第三方的qq weibo weixin等等)
  • identifier # 身份唯一标识(存储唯一标识,比如账号、邮箱、手机号、第三方获取的唯一标识等)
  • credential # 授权凭证(比如密码 第三方登录的token等)
  • verified # 是否已经验证(存储 1、0 来区分是否已经验证通过)

文件碎片表 cut_files 每个片段最大20m

  • id
  • file_md5 每段的md5
  • file_path 上传到七牛云生成的文件名路径
  • file_size 每段文件大小

用户文件表 user_files

  • id
  • user_id
  • file_name 用户上传的文件实际名称 为空的时候为文件夹
  • file_path 该文件在用户的网盘的虚拟路径 / 根目录 每个文件夹都以/结尾
  • file_size 文件的总大小
  • upload_size 已上传文件大小
  • file_sign 每个文件的唯一标志
  • state 文件状态 1 正常 0 删除 可设置下载权限 2公开 3有密码 4好友

用户文件和文件碎片关联表 user_cut_file

  • cut_id 碎片id
  • ufile_id 用户文件id
  • ordernum 文件组合顺序

文件分享

  • id 索引
  • f_id 用户文件id
  • down_code 提取码
  • over_time 到期时间 前端可选1天7天 无期 后台算出到期时间 null为无期

ResultBean 中code

200 成功

201 用户注册信息不符

202 用户注册验证码核对错误 / 验证码发送失败

203 注册失败

204 用户名或邮箱已被注册

205 登录失败,账号或密码错误

206 修改密码失败

301 上传文件为空

302 参数错误

303 文件上传失败

304 网盘系统中不存在该文件 前端上传

305 文件夹上传失败

306 文件删除失败

307 没有上传任务

308 用户不存在该文件

想法及问题:

文件分片:

将超过20M文件分片 每个20M ,后台不拼接只记录用户的文件的碎片id记录,记录文件大小和用户已上传的文件大小。用户在下载的时候后台再进行拼接生成最后文件

用户只显示已上传完成的文件

文件上传的分片上传时 需要算出总的上传片数 可以判断是否已上传完,但是ajax作为异步请求不可能是按顺序上传 所有后台 还是无法判断是否上传完成,所以只能前端发送一个请求告诉后台某文件已经上传完

用户文件名相同:

就以用户上传的文件名存储 但是在展示的时候如果同一个文件夹中有相同文件名 就加上上传时间区别

验证是否已经上传

文件上传之前通过验证md5 值验证系统中是否已存在文件,

如果不存在 让前端发送文件,

存在则直接将数据存入表中

存在的情况下在用户文件表中插入数据问题

​ 通过唯一标志file_sign在分段上传获取时会存在线程安全问题

​ synchronized(filesign.intern())

根据路径获取文件

数据库中path结构

怎么准确的获取指定目录下的文件

例: / 我得到的应该是 css 文件夹 Spring第一天.rar 两个文件

第一种方案 会查出很多重复数据

1.获取文件夹 模糊查询 currentpath%

select DISTINCT file_path from user_files where file_path LIKE '/%'

2.再通过分割

以currentpath后第一个/ 中间字符串 去重 作为文件夹

3.获取文件

使用currentpath 查询文件

第二种方案 mysql的正则表达式 (不行)

c++ '^/[^/]+/$' 以currentpath开头 以/结尾 中间不允许出现 / SELECT * FROM user_files WHERE file_path REGEXP '^/[^/]+/$';

JS中函数参数值传递和引用传递

ECMAScript中,对象无论是不是当成参数传递,都是按引用传递的

c++ var data = $.extend(true,{},filedata);

https://www.cnblogs.com/xljzlw/p/4399414.html

Jquery中的对未来元素的事件绑定

  • 1是已存在元素

  • 2未来元素

注意:绑定hover事件 需要重写mouseenter和mouseleave 事件

文件上传进度监听

监听器实现过程:https://blog.csdn.net/qq923014086/article/details/80997154

解析:

每个文件上传都会携带 一个file_sign 相同文件分块携带的是相同file_sign ,所以只需将进度信息以 Map 存在session中,每次请求以file_sign 为参数 返回 每个文件的上传进度信息

问题: 监听器并不准确 https://www.iteye.com/blog/herman-liu76-2357305

ajax请求 并返回json数据 有数据返回但是ajax不成功

问题: json数据格式错误

解决:Key值只能是string

这里使用ConcurrentHashMap HashMao线程不安全在高并发修改和添加操作下回出错 java.util.ConcurrentModificationException

文件分享

只供下载

没有用到state 使用了表关联 设置有效期 到期时间

生成一个下载链接 绑定文件的id 返回链接和一个提取码。

文件夹分享时:后来添加不分享

实现: 公开的分享,有密码的分享

三、待实现待完善

  • 进度条bug 实际上传完成但是监听上传大小不准确。在文件夹上传时出现频率高

  • 文件夹的下载

  • 文件的分享

  • 第三方登录 qq,微信,以及第三方登录和网站邮箱注册的绑定

  • 文件的多选操作

  • 回收箱

  • 用户信息的修改

  • 下载任务信息可以设置到浏览器缓存中

  • Bug:多个小文件上传很快 大文件分块会发生阻塞 其他请求会受到阻塞

  • 对接微信小程序

参考文献

  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于J2EE平台的Web服务技术的研究与实现(武汉理工大学·张迪)
  • 利用Coherence扩展WebLogic集群会话复制功能及应用(复旦大学·李晓溪)
  • 基于SSH2+AJAX架构的在线招聘求职系统设计与实现(吉林大学·李琦)
  • 基层部队网站的设计与建设(昆明理工大学·罗顺先)
  • 一个通用论坛系统的设计与实现(山东大学·张正)
  • 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
  • 基于Asp.Net和Ajax技术的BBS系统的设计与研究(南昌大学·陶勇强)
  • Webframe应用服务器中Web容器的设计与实现(扬州大学·张锋)
  • Webframe应用服务器中Web容器的设计与实现(扬州大学·张锋)
  • 齐齐哈尔合众商务科技有限公司门户网站设计(吉林大学·孟云飞)
  • 基于Hadoop的分布式数据存储设计与实现(吉林大学·毛剑)
  • 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
  • 基于SSH的手机网站的设计与实现(东北大学 ·陶志刚)
  • 一个通用论坛系统的设计与实现(山东大学·张正)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码码头 ,原文地址:https://bishedaima.com/yuanma/35969.html

相关推荐

发表回复

登录后才能评论