部署(测试)

本部署计划适用于在本地进行测试用

Web端

  1. Clone仓库gundb
  1. git clone https://se.jisuanke.com/gun-file-shearing/garlic-coffee/gundb.git
  1. 进入frontend目录
  1. cd frontend
  1. install
  1. npm install
  1. 启动本地服务器
  1. npm run serve

客户端

使用 Electron 打包 Gun 项目

  1. Clone仓库
  1. git clone https://se.jisuanke.com/gun-file-shearing/garlic-coffee/electron-gun.git
  1. electron 服务的试运行
  • 测试 electron 服务的打包与试运行
  1. cd frontend //执行这一步前请确保您在项目根目录下
  2. npm instal l
  3. vue add eletron-builder
  4. npm run eletron:serve

如遇到404问题,请换源

  1. npm config set ELECTRON_MIRROR=https://cdn.npm.taobao.org/dist/electron/
  2. npm install electron -g

(可选) electron 对 vue 项目打包

确保您在 fronted 文件夹下,执行以下命令打包该项目

  1. npm run electron:build

可执行文件将会生成在以下路径
..\frontend\dist_electron\win-unpacked

一、软件需求说明书

1、引言

(1)编写目的

本手册作为GarlicCoffee小组进行“GunDB 去中心化文件分享”项目开发需共同遵守的软件需求规范说明。

(2)背景

开发项目名称:GunDB 去中心化文件分享。

项目开发者:GarlicCoffee小组。

用户:所有有文件共享需求的互联网用户、企业局域网内部文件共享需求的用户。

当今网络时代,传输文件成为了许多工作必不可少的一环,但是传统的文件传输方式或多或少的存在一些问题——传输速度、兼容性以及方便程度。该项目目的即为解决这些问题,“GunDB 去中心化文件分享平台”可直接上传文件并生成分享链接,无需注册登录,可由上传用户自主选择暂存时间及下载次数。且下载速度能够维持相对稳定,真正做到了轻量、快捷、高效,以最简单的方式最快速的满足用户传输文件的需求。

(3)GunDB简要介绍

GUN是一个小型,简单,快速的数据同步和存储系统,可在JavaScript所处的任何地方运行。GUN的目的是让您专注于需要在应用程序中存储,加载和共享的数据,而不必担心服务器,网络调用,数据库或跟踪脱机更改或并发冲突。这使您可以快速构建出色的应用程序,例当浏览器对等体请求数据时,它将使用CRDT将回复与自己的数据合并,然后缓存结果。这意味着:下次浏览器要求提供该数据时,即使处于脱机状态,也可以立即得到答复。数据被复制在要求它的每个浏览器上。如果服务器出现故障,您仍然可以从浏览器恢复数据。这使得重要信息的丢失几乎是不可能的,因为数据的所有副本都需要在丢失之前被销毁。分布式GUN是完全分散的(对等或多主设备),这意味着更改不受集中式服务器的控制。服务器可以只是网络中的另一个对等方,该对等方可能具有比浏览器更可靠的资源。您将数据保存在一台计算机上,它将数据同步到其他对等设备,而无需复杂的共识协议,它只是工作。

2、任务概述

( 1)目标

①对于不同地区网络环境不稳定的情况,提供一个兼具CDN功能的去中心化文件共享平台。

②解决局域网内部文件分享的场景。

(2)用户特点

具有文件共享需求,讲求文件共享效率,拒绝其他所有的无用功能。

3、需求规定

( 1) 对功能的规定

①使用GunDB实现一个基于去中心化数据库的文件分享平台;

②可支持密码鉴权的文件提取;

③可支持局域网内的文件共享,需提供相应二进制文件让用户运行在本地;

④网页端支持部分文件预览(图片、视频、文字等);

⑤支持Web端和客户端(Electron支持即可)。

(2)功能描述:

Web端(通过公网传输用户)

Ⅰ 用户上传有限制文件

ⅰ 用户点击上传文件按钮

ⅱ 用户选择要上传的文件

ⅲ 检测文件大小是否合适

ⅳ 用户选择是否加密传输

ⅴ 若加密,输入密码;不加密,进行下一步

ⅵ 设置下载次数

ⅶ 设置下载时间范围

ⅷ 用户点击某个按钮确认上传文件

ⅸ 上传成功,弹出提示框示意成功上传

Ⅱ 用户上传无限制文

ⅰ 用户点击上传文件按钮

ⅱ 系统弹出文件选择界面

ⅲ 用户选择要上传的文件

ⅳ 系统检测文件大小是否合适

ⅴ 用户输入截止日期,下载次数,点击上传

ⅵ 系统上传,弹出提取码

ⅶ 用户点击提取码复制

Ⅲ 用户下载文件

ⅰ 用户点击下载文件选项

ⅱ 系统展示提取码输入框

ⅲ 用户输入提取码

ⅳ 若正确,系统显示下载次数和下载时间

ⅴ 用户点击某按钮开始下载

ⅵ 系统下载成功,弹出下载成功的提示框

Ⅳ 用户预览文件

ⅰ 用户点击下载文件按钮

ⅱ 选择下载方式

ⅲ 用户输入提取码或下载链接

ⅳ 出现某一界面显示文件列表,下载次数和下载时间

ⅴ 用户点击某文件的预览键

ⅵ 预览界面弹出,预览文件内容

客户端:(局域网用户)

Ⅰ 局域网用户上传文件

ⅰ 用户启动客户端

ⅱ 用户点击上传文件按钮

ⅲ 用户选择要上传的文件

ⅳ 检测文件大小是否合适

ⅴ 用户选择是否加密传输

ⅵ 若加密,输入密码;不加密,进行下一步

ⅶ 设置下载次数

ⅷ 设置下载时间范围

ⅸ 用户点击某个按钮开始上传文件

ⅹ 上传成功,弹出提示框示意成功上传

Ⅱ 局域网用户下载文件

ⅰ 用户点击下载文件按钮

ⅱ 选择下载方式

ⅲ 用户输入提取码或下载链接

ⅳ 出现某一界面显示下载次数和下载时间

ⅴ 若该文件被加密上传,输入密码;否则直接进入下一步

ⅵ 用户点击某按钮开始下载

ⅶ 下载成功,弹出下载成功的提示框

(3)对性能的规定

①精度

②时间特性要求

各个操作在1-5s内完成。

③灵活性

ⅰ 系统可以立即适应数据库接受的新数据;

ⅱ 要求系统可以在PC机和笔记本上通用。

(4)输入输出要求

①输入:

本地文件(.txt .docx .jpg .png .mp3 .mp4)、允许下载次数(数字)、允许下载期限(时间)、密码(文本)、提取码、下载链接(链接);

②输出:

下载文件(.txt .docx .jpg .png .mp3 .mp4)、提取码、下载链接(链接)、预览文件、操作结果提示。

(5)数据管理能力要求

说明允许上传文件 的 文件大小,记录文件下载时间和次数。

(6)故障处理要求

出现异常提供详细异常错误信息并给出合适的解决方案。

(7)其他专门要求

①可维护性:有错误时,可以提供及时修复工作;

②易读性:界面符合Windows友好界面风格;

③可转移性:系统可以在PC机和笔记本上通用;

④出现错误不会导致死机。

4、运行环境规定

(1)设备

笔记本电脑、台式电脑、移动设备

(2)支持 系统

Windows、Android

(3) 数据库平台

GunDB

(4) 接口

网站发布接口

二、概要设计说明书

1、引言

(1)编写目的

概要设计主要是利用比较抽象的语言对整个需求进行概括,确定对系统的物理配置,确定整个系统的处理流程和系统的数据结构,接口设计,人机界面,实现对系统的初步设计。我们根据需求分析得到的数据流图,将之转化为软件结构和数据结构,建立起目标系统的逻辑模型,使软件编程人员能对目标系统有一致的认识。

(2)背景

开发项目名称:GunDB 去中心化文件分享。

项目开发者:GarlicCoffee小组。

用户:所有有文件共享需求的互联网用户、企业局域网内部文件共享需求的用户。

(3)定义

GUN是一个小型,简单,快速的数据同步和存储系统,可在JavaScript所处的任何地方运行。GUN的目的是让您专注于需要在应用程序中存储,加载和共享的数据,而不必担心服务器,网络调用,数据库或跟踪脱机更改或并发冲突。

(4)参考资料

Gun文档( https://gun.eco/docs/

2、总体设计

(1)需求规定

输入信息 输出信息
本地文件(.txt .docx .jpg .png .mp3 .mp4 .pdf) 下载文件(.txt .docx .jpg .png .mp3 .mp4 .pdf)
允许下载次数(数字) 提取码(字符串)
允许下载期限(时间) 下载链接(链接)
密码(文本) 文件预览
提取码(字符串) 操作结果提示
下载链接(链接)

①可维护性:有错误时,可以提供及时修复工作;

②易读性:界面符合Windows友好界面风格;

③可转移性:系统可以在PC机和笔记本上通用;

④出现错误不会导致死机。

⑤出现异常提供详细异常错误信息并给出合适的解决方案。

(2)运行环境

①设备

笔记本电脑、台式电脑、移动设备

②支持系统

Windows、Android

③数据库平台

GunDB

④接口

网站发布接口

(3)基本设计概念和处理流程

开发设计文档 - 图1

(4)结构

①用户上传模块

开发设计文档 - 图2

ⅰ 用户点击上传文件按钮

ⅱ 用户选择要上传的文件

ⅲ 检测文件大小是否合适

ⅳ 用户选择是否加密传输

ⅴ 若加密,输入密码;不加密,进行下一步

ⅵ 设置下载次数

ⅶ 设置下载时间范围

ⅷ 用户点击某个按钮确认上传文件

ⅸ 上传成功,弹出提示框示意成功上传

②用户下载模块(查看文件预览仅web端)

开发设计文档 - 图3

ⅰ 用户点击下载文件选项

ⅱ 系统展示提取码输入框

ⅲ 用户输入提取码

ⅳ 若正确,系统显示下载次数和下载时间

ⅴ 用户点击某按钮开始下载

ⅵ 系统下载成功,弹出下载成功的提示框

用户预览文件( 仅web端)

ⅰ 用户点击下载文件按钮

ⅱ 选择下载方式

ⅲ 用户输入提取码或下载链接

ⅳ 出现某一界面显示文件列表,下载次数和下载时间

ⅴ 用户点击某文件的预览键

ⅵ 预览界面弹出,预览文件内容

(5)功能需求与程序的关系

Home.vue DownloadPage
用户上传模块
用户下载模块
用户预览文件

(6)人工处理过程

上传文件时需手动添加文件、下载次数、下载时间,下载文件是手动输入提取码或链接

3、接口设计( 内部 接口)

( 1 )Home.vue

· getTokenCode():生成本次上传的提取码

· getIDbyFC(tokenCode):根据提取码生成id,用于文件记录和提取码

· saltedHash(str,salt):salted函数,迭代 九 次

· getSalt(): 生成长度为9的随机序列作为salt值

· BKDRHash(str): 将字符串哈希为一个十进制整数

(2) DownloadPage

· submitToken():对于提交的提取码进行处理

· checkDueDate(): 对于数据库获取的截止下载日期进行判断

· checkDownloadTimes(): 对于数据库获取的下载次数进行判断

· downloadFile():下载文件

PasswordInput

· sumbiPassword():进行密码比对

4、运行设计

(1)运行模块的组合

本程序是以一个页面为模块,一般一个页面完成一个特定的功能。各模块之间相互独立,程序可移植性好。各模块之间主要以传递数据项的引用来实现模块之间的合作与数据共享、

(2)运行控制

运行机制将严格按照各模块之间的函数调用关系来实现、

(3)运行时间

各模块运行时间不定,这也跟用户的操作以及数据大小有关。

5、系统数据结构设计

(1)逻辑结构设计要点

属性名 存储代码 类型 备注
文件 getIDbyFC(tokenCode)
取件码 getIDbyFC(tokenCode) char
取件链接 getIDbyFC(tokenCode) char
下载时间 checkDueDate() char
下载次数 checkDownloadTimes int
密码 getSalt() int

(2)物理结构设计要求

给出本系统内所使用的每个数据结构中的每个数据项的存储要求、访问方法、存取单位、存取的物理关系、设计考虑和保密条件。

( 4 )数据结构与程序的关系

数据结构一程序式软件的重要组成部分,程序的正确执行依赖于合理的数据结构。

6、系统出错处理设计

(1)出错信息

错误类型 原因 解决方法
数据库链接错误 数据库设置不正确或server异常 取消本次操作,提醒用户检查数据库
输入错误 输入不规范 通过对话框,提醒用户,然后再次操作
其他操作错误 用户不正当操作使程序发生错误 终止操作提醒用户终止的原因和操作的规范
不可预知错误 未知异常 进行数据库备份,帮助开发者完善程序

(2)补救措施

数据库链接错误:数据库设置不正确或server异常,取消本次操作,提醒用户检查数据库。

输入错误:输入不规范,通过对话框,提醒用户,然后再次操作。

其他操作错误:用户不正当操作使程序发生错误,终止操作提醒用户终止的原因和操作的规范。

不可预知错误:未知异常,进行数据库备份,帮助开发者完善程序。

(3)系统维护设计

软件的维护主要包括数据库维护和软件功能维护。

本项目依托于GunDB,数据库维护较为简单。

对于软件功能方面的维护,由于我们采用模块化设计方式,每个模块之间相互独立性较高,这给软件维护带来极大方便,对单独功能修改只需修改一个模块或组件。

三、详细设计文档

1、引言

(1)编写目的

本详细设计说明书编写的目的是说明程序设计模块的设计考虑,包括程序描述、输入/输出、流程逻辑等,为软件编程和系统维护人员提供基础。本说明书的预期读者为系统设计人员、软件开发人员、软件测试人员和项目评审人员。

(2)背景

开发项目名称:GunDB 去中心化文件分享。

项目开发者:GarlicCoffee小组。

用户:所有有文件共享需求的互联网用户、企业局域网内部文件共享需求的用户。

(3)定义

GUN是一个小型,简单,快速的数据同步和存储系统,可在JavaScript所处的任何地方运行。GUN的目的是让您专注于需要在应用程序中存储,加载和共享的数据,而不必担心服务器,网络调用,数据库或跟踪脱机更改或并发冲突。

(4)参考资料

Gun文档( https://gun.eco/docs/

2 、程序设计说明

(1)程序描述

“GunDB 去中心化文件分享平台”可直接上传文件并生成分享链接,无需注册登录,可由上传用户自主选择暂存时间及下载次数。且下载速度能够维持相对稳定,真正做到了轻量、快捷、高效,以最简单的方式最快速的满足用户传输文件的需求。

(2)功能

Web端(通过公网传输用户)

Ⅰ 用户上传有限制文件

ⅰ 用户点击上传文件按钮

ⅱ 用户选择要上传的文件

ⅲ 检测文件大小是否合适

ⅳ 用户选择是否加密传输

ⅴ 若加密,输入密码;不加密,进行下一步

ⅵ 设置下载次数

ⅶ 设置下载时间范围

ⅷ 用户点击某个按钮确认上传文件

ⅸ 上传成功,弹出提示框示意成功上传

Ⅱ 用户上传无限制文

ⅰ 用户点击上传文件按钮

ⅱ 系统弹出文件选择界面

ⅲ 用户选择要上传的文件

ⅳ 系统检测文件大小是否合适

ⅴ 用户输入截止日期,下载次数,点击上传

ⅵ 系统上传,弹出提取码

ⅶ 用户点击提取码复制

Ⅲ 用户下载文件

ⅰ 用户点击下载文件选项

ⅱ 系统展示提取码输入框

ⅲ 用户输入提取码

ⅳ 若正确,系统显示下载次数和下载时间

ⅴ 用户点击某按钮开始下载

ⅵ 系统下载成功,弹出下载成功的提示框

Ⅳ 用户预览文件

ⅰ 用户点击下载文件按钮

ⅱ 选择下载方式

ⅲ 用户输入提取码或下载链接

ⅳ 出现某一界面显示文件列表,下载次数和下载时间

ⅴ 用户点击某文件的预览键

ⅵ 预览界面弹出,预览文件内容

客户端:(局域网用户)

Ⅰ 局域网用户上传文件

ⅰ 用户启动客户端

ⅱ 用户输入IP地址

ⅱ 用户点击上传文件按钮

ⅲ 用户选择要上传的文件

ⅳ 检测文件大小是否合适

ⅴ 用户选择是否加密传输

ⅵ 若加密,输入密码;不加密,进行下一步

ⅶ 设置下载次数

ⅷ 设置下载时间范围

ⅸ 用户点击某个按钮开始上传文件

ⅹ 上传成功,弹出提示框示意成功上传

Ⅱ 局域网用户下载文件

ⅰ 用户点击下载文件按钮

ⅱ 选择下载方式

ⅲ 用户输入提取码或下载链接

ⅳ 出现某一界面显示下载次数和下载时间

ⅴ 若该文件被加密上传,输入密码;否则直接进入下一步

ⅵ 用户点击某按钮开始下载

ⅶ 下载成功,弹出下载成功的提示框

(3)性能

①精度

②时间特性要求

各个操作在1-5s内完成。

③灵活性

ⅰ 系统可以立即适应数据库接受的新数据;

ⅱ 要求系统可以在PC机和笔记本上通用。

(4)输入项

本地文件(.txt .docx .jpg .png .mp3 .mp4 .pdf)、允许下载次数(数字)、允许下载期限(时间)、密码(文本)、提取码、下载链接(链接);

(5)输出项

下载文件 ( .txt .docx .jpg .png .mp3 .mp4 .pdf ) 、提取码、下载链接(链接)、预览文件、操作结果提示。

( 6 )流程逻辑

开发设计文档 - 图4

( 7 )接口

①Home.vue

· getTokenCode () :生成本次上传的提取码

提取码与文件无关,直接由数据库内的 计 数器生成来确保即使上传同样的文件也不会id重复

· getIDbyFC ( tokenCode ) :根据提取码生成id,用于文件记录和提取码

文件的id由提取码生成,方便了使用提取码提取时候对文件的寻找

· saltedHash(str,salt):salted函数,迭代九次

对密码进行加密,使用此文件的盐值进行加密

· getSalt(): 生成长度为9的随机序列作为salt值

随机生成盐值,用于加密

· BKDRHash(str): 将字符串哈希为一个十进 制 整数

②DownloadPage

· submitToken():对于提交的提取码进行处理

收到提取码之后会先转化成id,去数据库中寻找数据,然后判断日期和下载次数是否正确

· checkDueDate(): 对于数据库获取的截止下载日期进行判断

如不符合弹窗并返回false

· checkDownloadTimes(): 对于数据库获取的下载次数进行判断

若次数不符合则弹窗并返回false

每次点击下载按钮后也会调用此方法进行判断

· downloadFile():下载文 件

目前采用的是openURL,之后会采用XMLHttpRequest实现进度的监控

PasswordInput

· sumbiPassword ( ):进行密码比对

对密码进行比对,词嗄用盐值和哈希函数与原密码值进行比对

(8 )测试计划( 详细内容见测试文档 )

第一周:对已完成的前端页面和部分函数进行单元测试

第二周:对在前一周基础上对于新加入的功能进行单元测试

第三周:完成单元测试 的 基础上进行e2e测试