目录
- 项目简介
- 项目实现
- nginx配置
- 服务器逻辑图
- 项目代码简介
- reactor 模型部分
- 文件传输部分
- 项目演示
- 视频演示
- 演示分析
项目简介
使用C++开发,其中资源存储在fastdfs 中,用户通过http上传或下载资源文件,此项目需要开启nginx中的nginx-upload-module上传模块,设置文件上传的临时目录,缓存用户上传的文件,然后将文件信息附加到请求体中传递给服务端,服务端解析文件信息,将临时文件上传到fastdfs中,并将返回的链接保存到mysql后返回。
用户通过从mysql获取fastdfs返回的长链文件地址,然后通过nginx中的ngx_fastdfs_module模块从fastdfs下载对应资源,实现资源下载。
项目实现
nginx配置
首先要给 nginx
添加一些模块,nginx-upload-module
和 ngx_fastdfs_module
模块,nginx-upload-module
模块用于上传,ngx_fastdfs_module
模块用于通过 nginx
从 fastdfs
下载。
这里设置了临时文件保存目录 /root/tmp
,用来临时保存上传的文件,还设置了在请求体中添加的一些临时文件对应的信息一起传递给服务端。
可以从后续服务端的日志输出中看出这些配置是生效了的
服务器逻辑图
下图为传输服务器核心逻辑
项目代码简介
reactor 模型部分
头文件声明socket基础类,包含回调函数和一些socket创建,设置相关方法
实际上就是将C语言中 socket ,bind,listen,accept等方法封装成C++的形式
接收连接
epoll事件循环
文件传输部分
解析出从nginx中传过来的相应文件字段
然后将临时文件存入fastdfs,成功则将上传的文件信息存入mysql
项目演示
视频演示
资源传输服务器项目演示
演示分析
首先上传文件,查看文件列表,找到 fastdfs 返回的图片连接,在浏览器中可以访问,说明上传成功,可以直接下载,删除后发现从 fastdfs 删除成功