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

项目开发者:GarlicCoffee小组。


一. 引言

  1. 背景

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

  1. 应用领域和使用对象

应用领域:使用Gun进行了去中心化处理,保密性很高。可用于轻量级文件的加密传输,避免重要信息的泄露。

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

  1. 参考资料

术语解释

  • 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端:

本地

  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

服务器:

  1. 假定使用云服务器,安装Nginx:
  1. cd /etc
  2. apt-get update
  3. apt-get install nginx
  1. 编辑nginx设置
  1. vim /etc/nginx/nginx.conf
  2. server {
  3. listen 80 default_server;
  4. listen [::]:80 default_server;
  5. server_name 自己的服务器;
  6. root /usr/share/nginx/html/dist;
  7. # Load configuration files for the default server block.
  8. include /etc/nginx/default.d/*.conf;
  9. location / {
  10. }
  11. error_page 404 /404.html;
  12. location = /40x.html {
  13. }
  14. error_page 500 502 503 504 /50x.html;
  15. location = /50x.html {
  16. }
  17. }
  1. 进入Nginx目录,开启Nginx服务
  1. start nginx.exe
  1. 打包项目,并放到 /usr/share/nginx/html中
  1. npm run build

客户端:

使用 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 install
  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

操作实例

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

一、用户上传文件

  1. 用户点击发送文件按钮

用户说明书(含部署) - 图2

  1. 用户选择要上传的文件

用户说明书(含部署) - 图3

  1. 检测文件大小是否合适

(1)合适

用户说明书(含部署) - 图4

(2)不合适

用户说明书(含部署) - 图5

  1. 选择是否加密

(1)不加密,设置下载次数、下载时间范围、文件描述(选填)

用户说明书(含部署) - 图6

(2)加密,输入密码,设置下载次数,下载时间范围、文件描述(选填)

用户说明书(含部署) - 图7

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

用户说明书(含部署) - 图8

上传成功,弹出提取码、提取链接

用户说明书(含部署) - 图9

点击提取码、提取链接进行复制,复制成功,弹出提示框

用户说明书(含部署) - 图10

二、用户下载文件

  1. 用户输入提取链接或点击接收文件选项

(1)输入提取链接,输入正确跳转第五步

用户说明书(含部署) - 图11

输入错误

用户说明书(含部署) - 图12

(2)点击接收文件选项

用户说明书(含部署) - 图13

  1. 系统展示提取码输入框

用户说明书(含部署) - 图14

  1. 用户输入六位提取码、点击绿色按钮

用户说明书(含部署) - 图15

提取码正确则进行下一步,输入错误则自动刷新返回本页面,重新输入提取码

  1. 若有密码,提示输入密码;若没有密码,进行下一步

用户说明书(含部署) - 图16

(1)输入密码错误

用户说明书(含部署) - 图17

输入错误三次,返回首页

用户说明书(含部署) - 图18

(2)输入密码正确,弹出提示框,下一步

用户说明书(含部署) - 图19

  1. 系统显示文件预览(支持jpeg、mp3、mp4 (特定格式), PDF格式)、剩余下载次数、过期时间和文件大小

用户说明书(含部署) - 图20

用户说明书(含部署) - 图21

用户说明书(含部署) - 图22

用户说明书(含部署) - 图23

  1. 用户点击下载按钮开始下载

用户说明书(含部署) - 图24

用户说明书(含部署) - 图25

客户端:(局域网用户)

一、局域网用户上传文件

  1. 用户启动客户端

用户说明书(含部署) - 图26

  1. 用户输入并确定IP地址

2.用户单击选择文件按钮

用户说明书(含部署) - 图27

  1. 用户选择要上传的文件

用户说明书(含部署) - 图28

  1. 用户选择是否加密传输

用户说明书(含部署) - 图29

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

用户说明书(含部署) - 图30

  1. 设置下载次数

用户说明书(含部署) - 图31

  1. 设置下载时间范围

用户说明书(含部署) - 图32

  1. 用户点击上传按钮开始上传文件
  2. 上传成功,弹出提示框示意成功上传

用户说明书(含部署) - 图33

  1. 上传成功,显示下载链接及提取码

用户说明书(含部署) - 图34

二、局域网用户下载文件

  1. 用户点击下载文件按钮
  2. 用户输入提取码

用户说明书(含部署) - 图35

  1. 用户输入提取码

用户说明书(含部署) - 图36

  1. 出现界面显示下载次数和下载时间

用户说明书(含部署) - 图37

  1. 若该文件被加密上传,输入密码;否则直接进入下一步
  2. 用户点击某按钮开始下载

用户说明书(含部署) - 图38

  1. 下载成功

非常规处理

提供应急或非常规操作的必要信息及操作步骤,如出错处理操作作以及维护人员须知的操作和注意事项。

  1. 上传的文件大小并无限制,但是超过30M的文件会弹窗提示。测试时上传大文件会出现卡顿、相应延迟的情况。
  2. 在使用提取码进行提取时有一定概率会出现持续加载的情况,这是由于服务器的不稳定所致,有时需等待多达半分钟。所以当文件较小但出现持续加载时,建议刷新后重新输入提取码。
  3. 由于html内嵌播放器的限制,只能支持带有H.264视频编码和AAC音频编码的MPEG4文件。当上传MP4视频文件时有可能会出现无法预览的情况。