项目来自慕课网课程:GO实战仿百度云盘
- 服务架构:一个基本能用的文件上传服务
- 基本接口:基本功能接口(上传/下载/查询/删除)
- 逻辑代码演示:代码实操及功能流程演示
————filestore-server
|
|---db : 数据库相关函数
| |-- mysql
| | |--conn.go : 管理mysql链接对象,返回数据库单例
| |-- file.go : 处理文件的数据库API,调用conn.go的单例
| |-- user.go : 处理用户事务的数据库API,调用conn.go单例
|
|
|---doc : 一些重要文档资料
| |-- table.sql : 数据库表创建语句,方便查询
| |
| |
|
|
|---handler : 路由器映射API
| |-- handler.go : 路由器映射API,程序主逻辑
| |-- user.go : 用户逻辑API
| |
|
|---meta : 文件元数据相关
| |-- filemeta.go : 文件元数据,辅助handler.go的API进行对文件的增删改查操作
| |-- sort.go : 辅助文件元数据排序
| |
|
|---static : 保存静态文件的文件夹
| |-- view : *.html文件,用于浏览器返回
|
|
|---util : 工具文件夹
| |-- util.go : 加密,路径合法化判断,文件大小的一些可共用的函数
| |-- resp.go : 网页请求的reponse封装
|
|
main.go
//上传接口
http.HandleFunc("/file/upload",handler.UploadHandler)
//上传成功返回页面
http.HandleFunc("/file/upload/suc", handler.UploadSucHandler)
//查询文件元信息
http.HandleFunc("/file/meta", handler.GetFileMetaHandler)
//查询多个最新的元信息 limit=?
http.HandleFunc("/file/query", handler.FileQueryHandler)
//下载接口
http.HandleFunc("/file/download", handler.DownloadHandler)
//文件元信息修改 op: 0表示修改 1表示其他 filehash: 文件hash值 filename:新名称
http.HandleFunc("/file/update", handler.FileMetaUpdateHandler)
//删除文件 filehash:文件hash
http.HandleFunc("/file/delete", handler.FileDeleteHandler)
单点模式发送故障时对整个系统的影响很大,因此主从模式是相当优秀的解决方案
表字段说明
使用MySQL小结
- 通过sql.DB来管理数据库链接对象
- 通过sql.Open来创建协程安全的sql.DB对象
- 优先使用
Prepared Statement
本章小结
- MySQL的特点与应用场景
- 主从架构与文件表设计逻辑
- Golang与MySQL的亲密接触
- 支持用户注册/登录
- 支持用户Session鉴权
- 用户数据资源隔离
用户注册接口
//SignupHandler 处理用户注册请求
func SignupHandler(w http.ResponseWriter,r *http.Request){
//1.http GET请求,直接返回注册页内容
//2.校验参数的有效性
//3.加密用户名密码
//4.存入数据库tbl_user表以及返回结果
}
用户登录接口
//SignInHandler 登录接口,没有设置路由,而是通过静态地址访问
func SignInHandler(w http.ResponseWriter,r *http.Request){
//1.校验用户名及密码
//2.生成访问凭证(token)
//3.存储token到数据库tbl_user_token表
//4.返回username,token,重定向url等信息
}
用户信息查询接口
//UserInfoHandler 登录接口,没有设置路由,而是通过静态地址访问
func UserInfoHandler(w http.ResponseWriter,r *http.Request){
//1.解析请求参数
//2.验证访问凭证(token)
//3.查询用户信息
//4.组装并且相应用户数据
}
本章小结
- Mysql用户表的设计
- 注册/登录/查询接口的实现
- 验证Token的拦截器-