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.两者对比,看是否符合
golang 实战企业网盘相关推荐
- [实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3
写在前面 本篇文章将新建文件夹的逻辑也进行一下修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5 ...
- [实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2
写在前面 上篇文章修改文件上传的逻辑,这篇修改下文件下载的逻辑. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实 ...
- mvc5 ef6 mysql_[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2
写在前面 今天吃饭回来,突然有一个更好的想法,这里做一下记录. 系列文章 [实战]MVC5+EF6+MySql企业网盘实战(17)--思考2 思路 平时如果要获取电脑上的文件,大都会采用递归的方式,所 ...
- [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...
- [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表
写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...
- [实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件
写在前面 之前的上传文件的功能,只能上传到根目录,前两篇文章实现了新建文件夹的功能,则这里对上传文件的功能进行适配. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战] ...
- 个人网盘倒下去 企业网盘顶起来
阿里巴巴集团旗下的酷盘通过其官方微博宣布,由于公司业务调整,酷盘将从2015年8月10日停止新用户注册及数据上传服务,并从2015年10月10日起停止个人用户网络存储服务,原酷盘账号中所有数据都将被删 ...
- 互联网+办公”中的网红企业网盘——坚果云
"互联网+办公"中的网红企业网盘--坚果云 随着各行各业均向着"互联网+"方向发展的时代,云产品在企业转型中占据了越来越重要的地位.而"互联网+办公& ...
- 云盒子企业网盘入驻阿里云市场,正式向公有云市场发力!
近日,云盒子在官网下载页面新增了阿里云部署入口: 增加了这个入口后,用户可以通过0元购买阿里云镜像快速体验云盒子. 在阿里云上购买的云盒子版本为体验版,免费提供为期30天的全功能体验,除了基础的核心功 ...
最新文章
- levelDB数据库使用及实例 - 高性能nosql存储数据库
- PMCAFF微课堂 | 阿里高级产品专家: 揭秘B类App如何在高速生长期凝结含金量
- boost::contract模块实现base types的测试程序
- sql 分组后按时间降序排列再取出每组的第一条记录
- STL Map学习总结
- 擴展 CommandField 類別 - 刪除提示訊息
- python字典和集合对象可以进行索引操作_python字典和列表的高级应用
- (转载)python调用shell命令之os 、commands、subprocess
- 如何在20分钟内批量部署20台ESXi服务器?
- 将字符串转换为全角或半角
- Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
- IEEE Transactions on Vehicular Technology投稿经验分享-1
- 模电——基本运算放大器原理
- JS | 涉及字符串的内置函数的一些题目
- 京东大图在服务器哪个文件夹,京东图片管理在哪里?怎么使用?
- 【Qt】QtIFW 安装包制作总结 -如何创建多组件的安装器
- C++简介 C语言编程原理
- 浅谈无线路由器自动掉线解决办法
- 数据分析学习之roc曲线
- html5学习笔记——三、图文展示网页设计