[云盘]协议包和数据库表设计

协议

  • 登录用户
  • 注册用户
  • 我的文件
    • 我的文件展示页面
      • 服务器返回给前端
      • 秒传
      • 上传文件
  • 共享列表
  • 文件相关操作
    • 分享文件
    • 删除文件
    • pv字段处理
  • 数据库表设计
    • MySQL数据库
      • 用户信息表 user
      • 文件信息表 file_info
      • 用户文件列表user_file_list
      • 用户文件数量表user_file_count
      • 共享文件列表
    • Redis数据表
      • Hash
      • Zset

登录用户

//====================登陆用户
127.0.0.1:80/login

post数据(json)
{
	user:xxxx,
	pwd:xxx
}

注册用户

//====================注册用户
127.0.0.1:80/reg

post数据(json)
{
	userName:xxxx,
	nickName:xxx,
	firstPwd:xxx,
	phone:xxx,
	email:xxx
}

我的文件

在“我的文件”界面,会显示所有署遇用户的文件列表

  • (右键)点中图标:下载,分享,删除,属性
  • 没选中图标,右键界面空白:按下载量排序/按下载量排序/刷新/上传

我的文件展示页面

127.0.0.1:80/myfiles?cmd=count		//获取用户文件个数
post数据json包如下:
{
	"user": "yoyo"
}

//获取用户文件信息 127.0.0.1:80/myfiles&cmd=normal
//按下载量升序 127.0.0.1:80/myfiles?cmd=pvasc
//按下载量降序127.0.0.1:80/myfiles?cmd=pvdesc

post数据json包如下:

//start文件位置的起点,count文件的数量,则需要显示0~9位置为文件
{
	"user": "yoyo"
	"start": 0			//start指的是在从第几个文件开始
	"count": 10
}

服务器返回给前端

{ 
"files": 
	[
	  {
        "user": "yoyo",
        "md5": "e8ea6031b779ac26c319ddf949ad9d8d",
        "time": "2017-02-26 21:35:25",
        "filename": "test.mp4",
        "share_status": 0,
        "pv": 0,
        "url": "http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As-g3Z0782.mp4",
        "size": 27473666,
         "type": "mp4"
        },
	
		{
        "user": "yoyo",
        "md5": "e8ea6031b779ac26c319ddf949ad9d8d",
        "time": "2017-02-26 21:35:25",
        "filename": "test.mp4",
        "share_status": 0,
        "pv": 0,
        "url": "http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As-g3Z0782.mp4",
        "size": 27473666,
         "type": "mp4"
        }
	]
}

		/*
        {
        "user": "yoyo",
        "md5": "e8ea6031b779ac26c319ddf949ad9d8d",
        "time": "2017-02-26 21:35:25",
        "filename": "test.mp4",
        "share_status": 0,
        "pv": 0,
        "url": "http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As-g3Z0782.mp4",
        "size": 27473666,
         "type": "mp4"
        }
        */
        //-- user	文件所属用户
        //-- md5 文件md5
        //-- createtime 文件创建时间
        //-- filename 文件名字
        //-- shared_status 共享状态, 0为没有共享, 1为共享
        //-- pv 文件下载量,默认值为0,下载一次加1
        //-- url 文件url
        //-- size 文件大小, 以字节为单位
        //-- type 文件类型: png, zip, mp4……

秒传

	127.0.0.1:80/md5
	post数据(json)
	{
		user:xxxx,
		md5:xxx,
		fileName: xxx
	}

上传文件

127.0.0.1:80/upload

post数据如下:
------WebKitFormBoundary88asdgewtgewx\r\n
Content-Disposition: form-data; user="mike"; filename="xxx.jpg"; md5="xxxx"; size=10240\r\n
Content-Type: application/octet-stream\r\n
\r\n
真正的文件内容\r\n
------WebKitFormBoundary88asdgewtgewx

共享列表

在Qt界面点击“共享列表”,会显示所有当前共享的文件,注意共享的文件其信息是存在MySQL中单独的一张表中,

  • 按中图标:下载、属性、取消分享、转存文件
  • 没有按中图标:刷新

//获取用户文件个数 127.0.0.1:80/sharefiles?cmd=count
//按下载量升序 127.0.0.1:80/sharefiles?cmd=pvasc
//按下载量降序127.0.0.1:80/sharefiles?cmd=pvdesc
post数据json包如下:

//start文件位置的起点,count文件的数量,则需要显示0~9位置为文件
{
	"start": 0,
	"count": 10
}

{
	"filename": "test.mp4",
	"pv": 0
}
  • //下载文件pv字段处理
    //127.0.0.1:80/dealsharefile?cmd=pv

  • //取消分享文件
    //127.0.0.1:80/dealsharefile?cmd=cancel

  • //转存文件
    //127.0.0.1:80/dealsharefile?cmd=save

文件相关操作

分享文件

127.0.0.1:80/dealfile?cmd=share
post数据json包如下:
{
	"user": "xxx",
	"token": "xxx",
	"md5": "xxx",
	"filename": "xxx"
}

删除文件

	//删除文件
127.0.0.1:80/dealfile?cmd=del
post数据json包如下:
{
	"user": "yoyo",
	"token": "xxx",
	"md5": "xxx",
	"filename": "xxx"
}

pv字段处理

//下载文件pv字段处理
127.0.0.1:80/dealfile?cmd=pv
post数据json包如下:
{
	"user": "yoyo",
	"md5": "xxx",
	"filename": "xxx"
}

数据库表设计

MySQL数据库

创建数据库名为“dfs”

create database dfs;
use dfs;

用户信息表 user

用户信息表

  • id:用户序号,自动递增,主键

  • name:用户名字

  • nickname:用户昵称

  • phone:手机号码

  • email:邮箱

  • createtime:时间

      create table user
      (   id bigint not null primary key AUTO_INCREMENT,
      	name VARCHAR(128) not null,
      	nickname VARCHAR(128) not null,
      	password VARCHAR(128) not null,
      	phone VARCHAR(15) not null,
      	createtime VARCHAR(128),
      	email VARCHAR(100),
      	constraint uq_nickname unique(nickname), constraint uq_name unique(name)
      );
    

文件信息表 file_info

文件信息表

  • md5 文件md5-

  • file_id 文件id

  • url 文件url

  • size 文件大小, 以字节为单位

  • type 文件类型: png, zip, mp4……

  • count 文件引用计数, 默认为1, 每增加一个用户拥有此文件,此计数器+1

      create table file_info
      (
      	md5 varchar(200) not null primary key,
      	file_id varchar(256) not null,
      	url varchar(512) not null,
      	size bigint,
      	type VARCHAR(20),
      	count int
      );
    

用户文件列表user_file_list

  • 一个用户对应多个文件,而一个文件同样可以对应多个文件,所以select一个user适可以查到多条结果的,但是每条结果的文件MD5是不同的代表不同文件,也即返回一个结果集

  • 用户文件列表

    • user 文件所属用户

    • md5 文件md5

    • createtime 文件创建时间

    • filename 文件名字

    • shared_status 共享状态, 0为没有共享, 1为共享

    • pv 文件下载量,默认值为0,下载一次加1

        create table user_file_list
        (
        	user varchar(128) not null,
        	md5 varchar(200) not null,
        	createtime VARCHAR(128),
        	filename varchar(128),
        	shared_status int, 
        	pv int
        );
      

用户文件数量表user_file_count

用户文件数量表

  • user 文件所属用户

  • count 拥有文件的数量(要区分开file_info中的count字段)

    create table user_file_count
    (
    user varchar(128) not null primary key,
    count int
    );

共享文件列表

  • 共享文件列表,代表用户在自己的文件列表选择共享的文件,这个列表里一个用户可能有多个共享了的文件

  • 共享文件列表

    • user 文件所属用户

    • md5 文件md5

    • createtime 文件共享时间

    • filename 文件名字

    • pv 文件下载量,默认值为1,下载一次加1

        create table share_file_list
        (
        	user varchar(128) not null,
        	md5 varchar(200) not null,
        	createtime VARCHAR(128),
        	filename varchar(128),
        	pv int
        );
      

Redis数据表

Hash

Key为FILE_NAME_HASH,fileid作为field,value值是filename

Zset

Key为FILE_PUBLIC_ZSET,score为pv,value为

你可能感兴趣的:(云盘项目)