开发项目名称:GunDB 去中心化文件分享。
项目开发者:GarlicCoffee小组。
一. 引言
- 背景
当今网络时代,传输文件成为了许多工作必不可少的一环,但是传统的文件传输方式或多或少的存在一些问题——传输速度、兼容性以及方便程度。该项目目的即为解决这些问题,“GunDB 去中心化文件分享平台”可直接上传文件并生成分享链接,无需注册登录,可由上传用户自主选择暂存时间及下载次数。且下载速度能够维持相对稳定,真正做到了轻量、快捷、高效,以最简单的方式最快速的满足用户传输文件的需求。
- 应用领域和使用对象
应用领域:使用Gun进行了去中心化处理,保密性很高。可用于轻量级文件的加密传输,避免重要信息的泄露。
使用对象:所有有文件共享需求的互联网用户、企业局域网内部文件共享需求的用户皆可使用。
- 参考资料
Gun document :
介绍:有关Gun的文档 链接: https://gun.eco/docs/
Electron 文档
介绍:有关Electron的文档 链接: https://www.electronjs.org/docs
术语解释
- Gun :Gun是一个实时的、分布式的、离线优先的图形数据库引擎。
Realtime 实时 - 你可能会使用 Socket.IO 进行实时更新,但如果您重新加载页面,会发生什么情况?GUN 为解 决状态同步问题,无论是重新加载,还是所有用户,甚至冲突更新。
Distributed 分布式 - Gun 是端到端设计的,这意味着你不需要维护中心式的数据库服务器,同时也不用担心它会崩溃,因为不存在中心节点服务器。这可以让你整夜无需担心数据库的 DevOps,我们称之为 “NoDB”。
Offline-first 离线优先 - 即使你接收不到互联网或信号,Gun也可以工作,用户仍然可以像平常一样操作并保存数据,然后当网络恢复联机时,GUN 会自动同步所有更改并处理冲突。
Graph 图形化 - 大多数数据库迫使你做出妥协以匹配其存储限制,但图形化不同,它可以让你拥有任何你想要的数据结构,无论是关系型的传统表格,还是文档树,亦或是大量的循环引用。
- CDN :CDN的全称是Content Delivery Network,即内容分发网络。
CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
软件概述
目标
- 对于不同地区网络环境不稳定的情况下,提供一个兼具有CDN功能的去中心化文件共享平台
- 解决局域网内部文件分享的场景
功能
- 支持文件上传和提取
- 支持密码鉴权的文件提取
- 支持局域网内的文件共享
- WEB端支持文件预览(支持PDF,MP3,MP4等格式的预览)
- 支持Web端和客户端
性能
①精度
64bit
②时间特性要求
鼠标点击的各个操作可在1-5s内完成
下载时间根据文件大小不同,但不会过长
③灵活性
ⅰ 系统可以立即适应数据库接受的新数据
ⅱ 系统可以在PC机和笔记本上通用
运行环境
硬件配置
macOS 开发环境配置
macOS 10.10 (Yosemite) 及以上版本.
Windows 开发环境配置
Windows 7 及以上版本—-任何在低版本Windows上开发Electron的尝试都将是徒劳无功的。您可以使用微软向开发者免费提供的Windows 10虚拟机镜像。
软件配置
- electron
- gun
- node.js
- npm
- vue
运行说明
运行表
- WEB端
|操作的文件类型 |上传操作结果 |提取操作结果 |预览结果 |
|:——|:——|:——:|:——|:——:|:——|——:|:——|
| PDF | 成功 | 成功 | 成功 |
| MP3 | 成功 | 成功 | 成功 |
| MP4 | 成功 | 成功 | 特定编码格式成功 |
| JPEG | 成功 | 成功 | 成功 | - 客户端
|操作的文件类型 |上传操作结果 |提取操作结果 |预览结果 |
|:——|:——|:——:|:——|:——:|:——|——:|:——|
| PDF | 成功 | 成功 | 成功 |
| MP3 | 成功 | 成功 | 成功 |
| MP4 | 成功 | 成功 | 特定编码格式成功 |
| 其它 | 成功 | 成功 | 无预览 |
运行步骤
操作信息
WEB端:
本地
- Clone仓库gundb
git clone https://se.jisuanke.com/gun-file-shearing/garlic-coffee/gundb.git
- 进入frontend目录
cd frontend
- install
npm install
- 启动本地服务器
npm run serve
服务器:
- 假定使用云服务器,安装Nginx:
cd /etc
apt-get update
apt-get install nginx
- 编辑nginx设置
vim /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 自己的服务器;
root /usr/share/nginx/html/dist;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
- 进入Nginx目录,开启Nginx服务
start nginx.exe
- 打包项目,并放到 /usr/share/nginx/html中
npm run build
客户端:
使用 Electron 打包 Gun 项目
- Clone仓库
git clone https://se.jisuanke.com/gun-file-shearing/garlic-coffee/electron-gun.git
- electron 服务的试运行
测试 electron 服务的打包与试运行
cd frontend //执行这一步前请确保您在项目根目录下
npm install
vue add eletron-builder
npm run eletron:serve
如遇到404问题,请换源
npm config set ELECTRON_MIRROR=https://cdn.npm.taobao.org/dist/electron/
npm install electron -g
(可选)electron 对 vue 项目打包
确保您在 fronted 文件夹下,执行以下命令打包该项目
npm run electron:build
可执行文件将会生成在以下路径..\frontend\dist_electron\win-unpacked
操作实例
Web端(通过公网传输用户)
一、用户上传文件
- 用户点击发送文件按钮
- 用户选择要上传的文件
- 检测文件大小是否合适
(1)合适
(2)不合适
- 选择是否加密
(1)不加密,设置下载次数、下载时间范围、文件描述(选填)
(2)加密,输入密码,设置下载次数,下载时间范围、文件描述(选填)
用户点击按钮确认上传文件
上传成功,弹出提取码、提取链接
点击提取码、提取链接进行复制,复制成功,弹出提示框
二、用户下载文件
- 用户输入提取链接或点击接收文件选项
(1)输入提取链接,输入正确跳转第五步
输入错误
(2)点击接收文件选项
- 系统展示提取码输入框
- 用户输入六位提取码、点击绿色按钮
提取码正确则进行下一步,输入错误则自动刷新返回本页面,重新输入提取码
- 若有密码,提示输入密码;若没有密码,进行下一步
(1)输入密码错误
输入错误三次,返回首页
(2)输入密码正确,弹出提示框,下一步
- 系统显示文件预览(支持jpeg、mp3、mp4 (特定格式), PDF格式)、剩余下载次数、过期时间和文件大小
- 用户点击下载按钮开始下载
客户端:(局域网用户)
一、局域网用户上传文件
- 用户启动客户端
- 用户输入并确定IP地址
2.用户单击选择文件按钮
- 用户选择要上传的文件
- 用户选择是否加密传输
- 若加密,输入密码;不加密,进行下一步
- 设置下载次数
- 设置下载时间范围
- 用户点击上传按钮开始上传文件
- 上传成功,弹出提示框示意成功上传
- 上传成功,显示下载链接及提取码
二、局域网用户下载文件
- 用户点击下载文件按钮
- 用户输入提取码
- 用户输入提取码
- 出现界面显示下载次数和下载时间
- 若该文件被加密上传,输入密码;否则直接进入下一步
- 用户点击某按钮开始下载
- 下载成功
非常规处理
提供应急或非常规操作的必要信息及操作步骤,如出错处理操作作以及维护人员须知的操作和注意事项。
- 上传的文件大小并无限制,但是超过30M的文件会弹窗提示。测试时上传大文件会出现卡顿、相应延迟的情况。
- 在使用提取码进行提取时有一定概率会出现持续加载的情况,这是由于服务器的不稳定所致,有时需等待多达半分钟。所以当文件较小但出现持续加载时,建议刷新后重新输入提取码。
- 由于html内嵌播放器的限制,只能支持带有H.264视频编码和AAC音频编码的MPEG4文件。当上传MP4视频文件时有可能会出现无法预览的情况。