golang 实战企业网盘

一、功能需求

1.基于golang实现分布式文件上传服务

2.ceph和阿里云oss

3.支持断点续传和秒传功能

4.微服务化和容器部署

 

二、项目使用到的技术

redis

mysql

rabbitmq

docker部署微服务

ceph分布式存储

阿里云oss

 

三、收获干货

文件分块断点续传/秒传

对象从私有云迁移到阿里云oss的经验

 

四、项目进度

4.1 系统设计和搭建框架

接口列表

接口描述

接口url

文件上传接口

POST /file/upload

文件查询接口

GET /file/query

文件下载接口

GET /file/download

文件删除接口

POST /file/delete

文件重命名接口

POST /file/update

这块的命令是可以进行优化的,增删改查是对应http restful api的

定义文件元信息的结构fileMeta

文件的唯一标识是什么?可用文件内容计算的md5值或sha1值作为文件名

 

4.2 文件上传功能

1.用户请求是HTTP GET,则返回上传页面

2.用户请求是HTTP Post,则解析form信息,生成fileMeta文件元信息

3.真实文件存储到本地磁盘,文件元信息(如文件名称,文件大小,文件sha1,存储位置,更新时间等)存储到mysql数据库中

4.上传成功后,http重定向到“上传成功页面”

 

4.3 文件下载功能

1.解析用户请求中的filehash值

2.根据filehash从mysql数据库中获取文件元信息

3.根据文件元信息中的文件位置FileLocation,读取文件内容返回给客户端

3.设置http的header头部,客户端接收到回应后才会当成是文件下载(而不是数据内容)

w.Header().Set("Content-Type", "application/octect-stream")
w.Header().Set("Content-Description", "attachment;filename=\""+fm.FileName+"\"")

 

4.4 获取及更新文件元信息

从mysql数据库获取文件元,以json形式返回给客户端

更新文件元信息,包括更改文件名,文件大小,文件路径

 

4.5 删除文件元信息

1.从Form表单中,解析出filehash值

2.根据filehash值,获取文件元信息

3.根据文件元信息,删除磁盘上的真实文件

4.从mysql数据库中删除该文件的信息

 

4.6 用户注册和登录功能

注册功能

1.获取Post请求中Form表单的用户名和密码

2.将密码+固定字符串经过sha1处理,加强安全性,即使数据库泄漏了,密码也不会泄漏

3.将用户名密码以及其他信息都写入到mysql数据库中

 

登录功能

1.解析用户请求中Form,得到用户名和密码

2.将密码和固定字符串进行sha1运算,得出加密后的密码

3.从mysql数据库中获取用户名和密码

4.两者对比,看是否符合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章