一、功能需求

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 实战企业网盘相关推荐

  1. [实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3

    写在前面 本篇文章将新建文件夹的逻辑也进行一下修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5 ...

  2. [实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2

    写在前面 上篇文章修改文件上传的逻辑,这篇修改下文件下载的逻辑. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实 ...

  3. mvc5 ef6 mysql_[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2

    写在前面 今天吃饭回来,突然有一个更好的想法,这里做一下记录. 系列文章 [实战]MVC5+EF6+MySql企业网盘实战(17)--思考2 思路 平时如果要获取电脑上的文件,大都会采用递归的方式,所 ...

  4. [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

    写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表

    写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...

  6. [实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件

    写在前面 之前的上传文件的功能,只能上传到根目录,前两篇文章实现了新建文件夹的功能,则这里对上传文件的功能进行适配. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战] ...

  7. 个人网盘倒下去 企业网盘顶起来

    阿里巴巴集团旗下的酷盘通过其官方微博宣布,由于公司业务调整,酷盘将从2015年8月10日停止新用户注册及数据上传服务,并从2015年10月10日起停止个人用户网络存储服务,原酷盘账号中所有数据都将被删 ...

  8. 互联网+办公”中的网红企业网盘——坚果云

    "互联网+办公"中的网红企业网盘--坚果云 随着各行各业均向着"互联网+"方向发展的时代,云产品在企业转型中占据了越来越重要的地位.而"互联网+办公& ...

  9. 云盒子企业网盘入驻阿里云市场,正式向公有云市场发力!

    近日,云盒子在官网下载页面新增了阿里云部署入口: 增加了这个入口后,用户可以通过0元购买阿里云镜像快速体验云盒子. 在阿里云上购买的云盒子版本为体验版,免费提供为期30天的全功能体验,除了基础的核心功 ...

最新文章

  1. levelDB数据库使用及实例 - 高性能nosql存储数据库
  2. PMCAFF微课堂 | 阿里高级产品专家: 揭秘B类App如何在高速生长期凝结含金量
  3. boost::contract模块实现base types的测试程序
  4. sql 分组后按时间降序排列再取出每组的第一条记录
  5. STL Map学习总结
  6. 擴展 CommandField 類別 - 刪除提示訊息
  7. python字典和集合对象可以进行索引操作_python字典和列表的高级应用
  8. (转载)python调用shell命令之os 、commands、subprocess
  9. 如何在20分钟内批量部署20台ESXi服务器?
  10. 将字符串转换为全角或半角
  11. Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
  12. IEEE Transactions on Vehicular Technology投稿经验分享-1
  13. 模电——基本运算放大器原理
  14. JS | 涉及字符串的内置函数的一些题目
  15. 京东大图在服务器哪个文件夹,京东图片管理在哪里?怎么使用?
  16. 【Qt】QtIFW 安装包制作总结 -如何创建多组件的安装器
  17. C++简介 C语言编程原理
  18. 浅谈无线路由器自动掉线解决办法
  19. 数据分析学习之roc曲线
  20. html5学习笔记——三、图文展示网页设计

热门文章

  1. VIPS 98经济型漏电继电器
  2. 《2040大预言:高科技引擎与社会新秩序》——2.10 社会的极化
  3. 成功就是日复一日那一点点小小努力的积累
  4. 网络游戏防变速齿轮外挂
  5. 2011年最后的科学猜想-人脑中有微博么?
  6. 天火同人 (易經大意 韓長庚)
  7. Clickhouse副本的特性
  8. web前端-国际化-自动翻译(免费)
  9. 剑指offer16. 数值的整数次方P110
  10. SQL中的and和or的优先级介绍