C++ 网络编程项目fastDFS分布式文件系统(五)--nginx+fastdfs
目录
1. 文件上传下载流程
2. Nginx和fastDFS的整合
3. 数据库表
3.1 数据库操
3.2 数据库建表
1. 文件上传下载流程

fileID 需要是一个哈希来判定。
2. 文件下载流程


3. 优化
1. 客户端发送请求使用的协议 : httpfastDFS 能不能解析 http 协议nginx能解析 http 协议在 nginx 中安装 fastDFS 的插件2. 客户端怎么知道文件就存储在对应的那个存储节点上 ?上传的时候将 fileID 和存储节点 IP 地址都进行存储
2. Nginx和fastDFS的整合
1. 在存储节点上安装Nginx, 将软件安装包拷贝到fastDFS存储节点对应的主机上
# 1. 找 fastDFS 的存储节点# 2. 在存储节点对应的主机上安装 Nginx, 安装的时候需要一并将插件装上# - ( 余庆提供插件的代码 + nginx 的源代码 ) * 交叉编译 = Nginx
2. 在存储节点对应的主机上安装Nginx, 作为web服务器
- fastdfs-nginx-module_v1.16.tar.gz 解压缩# 1. 进入 nginx的源码安装目录 /home/lixiaoxiang/packages/nginx-1.10.1# 2. 检测环境 , 生成 makefile./configure --add-module = fastdfs 插件的源码目录 /srcmakesudo make install
make过程中的错误
# 1. fatal error: fdfs_define.h: No such file or directory# 2. fatal error: common_define.h: No such file or directorydefault: buildclean:rm -rf Makefile objsbuild:$(MAKE) -f objs/Makefileinstall:$(MAKE) -f objs/Makefile installmodules:$(MAKE) -f objs/Makefile modulesupgrade:/usr/local/nginx/sbin/nginx -tkill -USR2 `cat /usr/local/nginx/logs/nginx.pid`sleep 1test -f /usr/local/nginx/logs/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`# 解决方案 - 修改 objs/MakefileALL_INCS = -I src/core \-I src/event \-I src/event/modules \-I src/os/unix \-I /usr/local/include/fastdfs \-I /usr/local/include/fastcommon/ \-I objs \-I src/http \-I src/http/modules\-I /usr/include/fastdfs/
3. 安装成功, 启动Nginx, 发现没有 worker进程
lixiaoxiang@ubuntu:/usr/local/nginx/sbin $ ps aux|grep nginxroot 65111 0 .0 0 .0 39200 696 ?Ss 10 :32 0 :00 nginx: master process./nginxrobin 65114 0 .0 0 .0 16272 928 pts/9 S + 10 :32 0 :00 grep --color = autonginx
找nginx的logs日志
# ERROR - file: shared_func.c, line: 968, file /etc/fdfs/mod_fastdfs.conf not exist# 从哪儿找 -> fastDFS 插件目录中找robin@OS:~/package/nginx/fastdfs-nginx-module/src $ tree.├── common.c├── common.h├── config├── mod_fastdfs.conf -> cp /etc/fdfs└── ngx_http_fastdfs_module.c0 directories, 5 files
需要修改mod_fdfs.conf (etc/fdfs)文件, 参数当前存储节点的storage.conf进行修改
# 存储 log 日志的目录base_path=/home/robin/fastdfs/storage# 连接 tracker 地址信息tracker_server = 192 .168.91.130:22122# 存储节点绑定的端口storage_server_port = 23000# 当前存储节点所属的组group_name = group1# 客户端下载文件的时候 , 这个下载的 url 中是不是包含组的名字// 上传的 fileID: group1/M00/00/00/wKj3h1vJRPeAA9KEAAAIZMjR0rI076.cpp// 完整的 url: http://192.168.1.100/group1/M00/00/00/wKj3h1vJRPeAA9KEAAAIZMjR0rI076.cppurl_have_group_name = true# 存储节点上存储路径的个数store_path_count = 1# 存储路径的详细信息store_path0=/home/robin/fastdfs/storage
# ERROR - file: ini_file_reader.c, line: 631, include file "http.conf" not exists,line: "#include http.conf"从 /etc/fdfs 下找的时候不存在- 从 fastDFS 源码安装目录找 /conf- sudo cp http.conf /etc/fdfs#lixiaoxiang@ubuntu:~/packages/fastdfs-5.10/conf$ sudo cp http.conf /etc/fdfs/
# ERROR - file: shared_func.c, line: 968, file /etc/fdfs/mime.types not exist- 从 nginx 的源码安装包中找 /conf- sudo cp mime.types /etc/fdfs#lixiaoxiang@ubuntu:~/packages/nginx-1.10.1/conf$ sudo cp mime.types /etc/fdfs/![]()
5. 通过浏览器请求服务器下载文件: 404 Not Found
http://192.168.1.100/group1/M00/00/00/wKj3h1vJRPeAA9KEAAAIZMjR0rI076.jpg# 错误信息open() "/usr/local/nginx/zyFile2/group1/M00/00/00/wKj3h1vJSOqAM6RHAAvqH_kipG8229.jpg"failed (2: No such file or directory), client: 192.168.247.1, server: localhost,request: "GET /group1/M00/00/00/wKj3h1vJSOqAM6RHAAvqH_kipG8229.jpg HTTP/1.1", host:"192.168.247.135"服务器在查找资源时候 , 找的位置不对 , 需要给服务器指定一个正确的位置 , 如何指定 ?
- 资源在哪 ? ====> 在存储节点的存储目录中 store_path0- 如何告诉服务器资源在这 ? =====> 在服务器端添加 location 处理locatioin /group1/M00/00/00/wKj3h1vJSOqAM6RHAAvqH_kipG8229.jpglocation /group1/M00/00/00/location /group1/M00/location /group1/M00/{# 告诉服务器资源的位置root /home/robin/fastdfs/storage/data;#关键字ngx_fastdfs_module;}
项目遇到的问题:
一直无法加载到图片,最后发现mod_fdfs.conf 里面store_path0=/home/robin/fastdfs/storage 路径协程了 fastfds 错误,导致加载不出来。花了一个小时,最后想起来看日志信息。发现里面的路径不对,修改了 了路径就可以了

3. 数据库表
3.1 数据库操
1. 创建一个名称为cloud_disk的数据库
CREATE DATABASE cloud_disk;
drop database cloud_disk;
use cloud_disk;
3.2 数据库建表
1. 用户信息表 -- user

CREATE TABLE user (id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT ,name VARCHAR ( 128 ) NOT NULL ,nickname VARCHAR ( 128 ) NOT NULL ,password VARCHAR ( 128 ) NOT NULL ,phone VARCHAR ( 15 ) NOT NULL ,createtime VARCHAR ( 128 ),email VARCHAR ( 100 ),CONSTRAINT uq_nickname UNIQUE (nickname),CONSTRAINT uq_name UNIQUE (NAME));
2. 文件信息表 - user_file_list

CREATE TABLE user_file_list (user VARCHAR ( 128 ) NOT NULL ,md5 VARCHAR ( 200 ) NOT NULL ,createtime VARCHAR ( 128 ),filename VARCHAR ( 128 ),shared_status INT ,pv INT);
CREATE TABLE user_file_list (user VARCHAR ( 128 ) NOT NULL ,md5 VARCHAR ( 200 ) NOT NULL ,createtime VARCHAR ( 128 ),filename VARCHAR ( 128 ),shared_status INT ,pv INT);
CREATE TABLE user_file_count (user VARCHAR ( 128 ) NOT NULL PRIMARY KEY ,count INT);
5. 共享文件列表 - share_file_list

CREATE TABLE share_file_list (user VARCHAR ( 128 ) NOT NULL ,md5 VARCHAR ( 200 ) NOT NULL ,createtime VARCHAR ( 128 ),filename VARCHAR ( 128 ),pv INT);
# 分析出客户端请求对应的指令 -- /testlocation / test{# 转发出去fastcgi_pass 地址 : 端口 ;include fastcgi.conf;}
fastcgi如何接收数据
# 启动 , 通过 spawn-fcgi 启动spawn-fcgi -a IP -p port -f ./fcgi# 编写 fastCGI 程序的时候- 接收数据 : 调用读终端的函数就是接收数据- 发送数据 : 调用写终端的函数就是发送数据
// 编写登录的 fastCgI 程序int main (){while ( FCGI_Accept () >= 0 ){// 1. 接收登录信息 -> 环境变量中// post -> 读数据块的长度 CONTENT-LENGTH// get -> 从请求行的第二部分读 QUEERY_STRING// 2. 处理数据// 3. 回发结果 -> 格式假设是 jsonprintf ( "Content-type: application/json" );printf ( "{\"status\":\"OK\"}" )}}
相关文章:
C++ 网络编程项目fastDFS分布式文件系统(五)--nginx+fastdfs
目录 1. 文件上传下载流程 2. Nginx和fastDFS的整合 3. 数据库表 3.1 数据库操 3.2 数据库建表 1. 文件上传下载流程 fileID 需要是一个哈希来判定。 2. 文件下载流程 3. 优化 优化思路 : 直接让客户端连接 fastDFS 的存储节点 , 实现文件下载 举例 , 访问一个…...
开发者本地搭建性能监测工具(Windows)
ElasticSearch 8.9.0 开发模式安装 JDK安装 官方提供版本与JDK支持关系:https://www.elastic.co/cn/support/matrix#matrix_jvm 我们安装Elasticsearch 8.9.x,看到支持的最低JDK版本是17。 JDK(Windows/Mac含M1/M2 Arm原生JDK)…...
嵌入式Linux开发实操(八):UART串口开发
串口可以说是非常好用的一个接口,它同USB、CAN、I2C、SPI等接口一样,为SOC/MCU构建了丰富的接口功能。那么在嵌入式linux中又是如何搭建和使用UART接口的呢? 一、Console接口即ttyS0 ttyS0通常做为u-boot(bootloader的一种,像是Windows的BIOS),它需要一个交互界面,一般…...
公告:微信小程序备案期限官方要求
备案期限要求 1、若微信小程序未上架,自2023年9月1日起,微信小程序须完成备案后才可上架,备案时间1-20日不等; 2、若微信小程序已上架,请于2024年3月31日前完成备案,逾期未完成备案,平台将按照…...
cesium中获取高度的误区
this.ellipsoid viewer.scene.globe.ellipsoid; var cartesian viewer.camera.pickEllipsoid(e.position, this.ellipsoid);if(cartesian){// 苗卡尔椭球体的三维坐标 转 地图坐标(弧度)var cartographic viewer.scene.globe.ellipsoid.cartesianToCa…...
基于Centos:服务器基础环境安装: JDK、Maven、Python、Go、Docker、K8s
创建用户 useradd dev groupadd op chown -R :op /opt chmod -R 770 /opt usermod -aG op devJDK8 yum install -y java-1.8.0-openjdk-devel echo export JAVA_HOME/usr/lib/jvm/java-1.8.0/>> /etc/profilesource /etc/profileJDK11 yum install -y java-11-openjd…...
Elasticsearch的数据删除策略只能触发一次
在Elasticsearch中,可以使用Index Lifecycle Management(ILM)来设置删除数据的保留时长。ILM是Elasticsearch的一项功能,用于管理索引的生命周期,包括数据保留、备份、归档等操作。 要设置删除数据的保留时长…...
Open3D 最小二乘拟合空间直线(方法一)
目录 一、算法原理1、空间直线2、最小二乘法拟合二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、空间直线 x −...
解决uniapp 二次登陆 登录页是首页时,登录页闪现问题
pages.json文件中,pages数组中第一项是登录页,用户第一次登录后,存储登录状态,以后再进入应用时,自动登录跳转至首页。 但是自动登录跳转至首页时,登录页总是会闪现一下。 第一步:manifest.js…...
如何快速制作一个房地产电子传单?
在如今高度数字化的时代,电子传单成为了宣传推广的一种重要方式。下面将介绍如何利用乔拓云平台快速制作一个房地产电子传单。 第一步,找一个可靠的第三方制作平台/工具,比如乔拓云平台。乔拓云平台是一个功能强大、简单易用的电子传单制作工…...
golang云原生项目之:etcd服务注册与发现
服务注册与发现:ETCD 1直接调包 kitex-contrib: 上面有实现的案例,直接cv。下面是具体的理解 2 相关概念 EtcdResolver: etcd resolver是一种DNS解析器,用于将域名转换为etcd集群中的具体地址,以便应用程序可以与et…...
arm:day4
1. 实现三盏灯的点亮 .text .global _start_start: led1初始化函数LED_INIT: 1 通过RCC_AHB4_ENSETR寄存器,设置GPIOE F组控制器使能 0x50000A28[5:4]1ldr r0,0X50000A28ldr r1,[r0]orr r1,r1,#(0X3<<4)str r1,[r0] 2.1 通过GPIOE_MODER寄存器,…...
flutter 常见的状态管理器
flutter 常见的状态管理器 前言一、Provider二、Bloc三、Redux四、GetX总结 前言 当我们构建复杂的移动应用时,有效的状态管理是至关重要的,因为应用的不同部分可能需要共享数据、相应用户交互并保持一致的状态。Flutter 中有多种状态管理解决方案&#…...
Kotlin的Map
在 Kotlin 中,Map 是一种键值对的集合数据结构,用于存储一组关联的键和值。Kotlin 标准库提供了 Map 接口和多种实现类,使得操作和处理键值对数据更加方便。下面详细描述 Kotlin 的 Map 的用法: 创建 Map Kotlin 提供了几种方式…...
STM32 串口复习
按数据通信方式分类: 串行通信:数据逐位按顺序依次传输。传输速率较低,抗干扰能力较强,通信距离较长,I/O资源占用较少,成本较低。并行通信:数据各位通过多条线同时传输。 按数据传输方向分类&…...
VScode替换cmd powershell为git bash 终端,并设置为默认
效果图 步骤 1. 解决VScode缺少git bash的问题_failed to start bash - is git-bash.exe on the syst_Rudon滨海渔村的博客-CSDN博客效果解决步骤找到git安装目录下的/bin/bash.exe,复制其绝对路径,例如D:\Program Files\Git\bin\bash.exe把路径的右斜…...
网络基础(一)桥接网络
网络基础知识 桥接网络 桥接网络是一种网络设计技术,其目的是将两个或多个网络段连接在一起,使它们在逻辑上表现为单个网络。这通过使用网络桥来实现,网络桥工作在数据链路层(第2层),只关心MAC地址&#…...
C#程序变量统一管理例子 - 开源研究系列文章
今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子。 我们知道,在C#里使用变量,除了private私有变量外,程序中使用到的公共变量就需要进行统一的存放和管理。这里笔者使用到的公共变量管理库划分为:1)窗体;2)…...
信息熵,信息增益,增益率的理解
西瓜数据集D如下: 编号色泽根蒂敲声纹理脐部触感好瓜1青绿蜷缩浊响清晰凹陷硬滑是2乌黑蜷缩沉闷清晰凹陷硬滑是3乌黑蜷缩浊响清晰凹陷硬滑是4青绿蜷缩沉闷清晰凹陷硬滑是5浅白蜷缩浊响清晰凹陷硬滑是6青绿稍蜷浊响清晰稍凹软粘是7乌黑稍蜷浊响稍糊稍凹软粘是8乌黑稍蜷浊响清晰…...
二级MySQL(一)——基本概念与方法
数据库系统的核心是【数据库管理系统】 E-R图提供了表示信息世界中的方法,主要有实体、属性和【联系】 E-R图是数据库设计的工具之一,一般适用于建立数据库的【概念模型】 将E-R图转换到关系模式时,实体与联系都可以表示成【关系】 关系数…...
Claude Code质量崩了?Anthropic认错;3人+100个AI月烧130万美元,炸了
每天更新,带你读懂科技圈。 今日看点: Anthropic正式发布Claude Code质量事故复盘;OpenClaw之父晒出130万美元月账单——3人100个AI agent震撼业界;Hermes团队砍掉预训练六成成本;GitHub Copilot推桌面应用狙击AI编程对…...
瑞萨RA系列MCU入门实战:用e2 studio和FSP库5分钟点灯(从安装到烧录)
瑞萨RA系列MCU五分钟极速入门:从零点亮LED的全流程解析 当一块全新的瑞萨RA系列开发板第一次在你手中亮起LED时,那种"Hello World"式的成就感往往能瞬间点燃学习热情。不同于传统教程按部就班的软件安装介绍,本文将带您体验实战驱…...
别再乱画了!GD32/STM32复位与唤醒按键电路设计,90%新手会踩的坑
GD32/STM32复位与唤醒按键电路设计避坑指南 1. 复位电路设计的核心误区与解决方案 许多工程师在设计GD32/STM32复位电路时,往往低估了RC时间常数的重要性。我曾亲眼见过一个团队花费两周时间排查系统随机重启问题,最终发现竟是复位电路中一个10kΩ电阻被…...
【免费下载】 STM32标准库-SPI-DMA收发数据-读写Flash(W25Q256JV)-仿printf和scanf输入输出
STM32标准库-SPI-DMA收发数据-读写Flash(W25Q256JV)-仿printf和scanf输入输出 【下载地址】STM32标准库-SPI-DMA收发数据-读写FlashW25Q256JV-仿printf和scanf输入输出 本项目基于STM32F429IGT6单片机,利用Keil MDK V5.32开发环境,展示了如何通过SPI接口…...
生物 --- 免疫力
1、免疫的概念免疫是人体的一种生理功能。识别“自己”和“非己”。破坏和排斥进入人体内的抗原物质,如病原体。指机体识别和清除外来入侵抗原及体内突变或衰老细胞,并维持自身内环境稳定的生理功能。2、免疫系统的构成免疫系统主要由免疫器官、免疫细胞…...
从DDR到LPDDR:搞懂手机和电脑内存差异,看这一篇就够了(附选型避坑指南)
从DDR到LPDDR:全面解析移动与桌面内存的技术差异与选型策略 在智能设备性能爆发的时代,内存技术正经历着从"够用"到"极致优化"的转变。当工程师面对物联网终端需要0.5W超低功耗、游戏手机追求100GB/s带宽、自动驾驶系统要求纳秒级延…...
ESP32项目编译后,如何看懂Output里的内存占用(DRAM/IRAM/Flash详解)
ESP32项目编译后内存占用分析:从DRAM到Flash的深度解读 当你在VSCode中按下编译按钮,看到终端输出那一连串内存占用数据时,是否曾感到困惑?这些数字背后隐藏着ESP32内存架构的秘密,也直接关系到你的项目性能和稳定性。…...
AI 术语通俗词典:卷积
卷积是数学、信号处理、图像处理、深度学习、卷积神经网络和人工智能中非常重要的一个术语。它用来描述一种用一个小窗口在数据上滑动,并对局部区域进行加权汇总的运算。换句话说,卷积是在回答:如何从图像、语音或序列数据中提取局部模式。如…...
科研实战:三种高效获取ERA5再分析数据的路径解析
1. ERA5再分析数据基础认知 第一次接触ERA5数据时,我和大多数科研新手一样被各种专业术语搞得晕头转向。简单来说,ERA5就像给地球做CT扫描生成的全球气象体检报告,它能提供从1950年到现在,每小时更新的气温、降水、风速等上百种气…...
开发上下文管理工具:原理、实现与工程实践
1. 项目概述:一个为开发者量身定制的上下文管理工具如果你和我一样,每天要在多个项目、多种技术栈、甚至多个开发环境之间反复横跳,那你一定对“上下文切换”这个词深恶痛绝。我说的不是操作系统的上下文切换,而是我们开发者大脑里…...
