当前位置: 首页 > article >正文

图床项目总结

1. fastdfs 、nginx 文件管理模块1. 1 fastdfs 三大组件1.1.1 tracker server相当于一个调度器其内部不存储文件只存储storage 服务器相关的一些元信息(存在于内存中)通过连接storage后由storage汇报的信息生成的根据这些信息 组成一个group -- storage的关联信息。当需要上传文件的时候分配goup 客户端先访问trackertracker根据负载均衡的策略(比如某个剩余空间大的storage服务器)分配一个group分配storage然后再到group中选择一个storage 并给出path客户端访问storage客户端将向storage发送写文件请求storage将会为文件分配一个数据存储目录配置tracker 只需要配置data和logs路径1.1.2 storage server真正存储文件的服务器其中经过tracker的分配会有一个逻辑上的组group每个group中含有多个storage互为备份当上传文件的时候选择其中一个上传其余storage后续通过binlog日志进行同步。一般内部会有256*256个子目录去存储文件。比如 00/00/ 00/01等。当文件上传的时候记录Fileidstorage会为文件生成一个Fileid由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成然后将这个二进制串进行base64编码转换为可打印的字符串。存储到两级目录每个存储目录下有两级256*256的子目录storage会按文件fileid进行两次hash猜测路由到其中一个子目录然后将文件以fileid为文件名存储到该子目录下生成文件名当文件存储到某个子目录后即认为该文件存储成功接下来会为该文件生成一个文件名文件名由group、存储目录、两级子目录、fileid、文件后缀名由客户端指定主要用于区分文件类型拼接而成。配置storage① 需要设置好data的存储位置② 需要设置好M00的映射地址(真正的物理地址)1.1.3 client提供的一个客户端相当于需要往fastdfs中输入一些指令upload xx xx、download xx xx1.1.4 fastdfs-nginx-module 下载文件该模块是fastdfs中长期使用的稳定模块而且配置文件的路径和storage一致这个模块的作用如果没有此模块后端从数据库取出文件ID如 group1/M00/00/00/xxx.txt后端连接Tracker 调用指令获取文件所在的地址后端发送读取请求获取文件流调用指令读取文件后端返回文件流给前端如果有此模块后端只返回一个 HTTP URL 给前端http://10.0.0.1:80/group1/M00/00/00/xxx.txt前端直接使用URL下载前端直接使用这个 URL 下载a 标签或 window.open流量直接从 Nginx 流向客户端不经过业务后端1. 2 nginx 模块nginx-upload-module用于上传文件如果没有该模块则上传文件的二进制内容全都要放在请求体中数据解析困难。引入该模块之后便可以在nginx层面解析multipart/form-data将文件保存到临时目录然后生成包含文件信息的变量如$upload_tmp_path等再将请求转发到后端如/api/upload后端从变量或环境变量中获取文件路径来处理。2. 文件上传2.0 文件秒传其实就是根据MD5查看file_info中是否已经存在相同MD5的文件如果已经存在则再去查user_file_list中有没有如果没有则添加一条记录并且把file_info的引用计数 1。如果秒传失败则触发2.12.1 上传经过nginx-upload-file模块的recv的数据是和前端调用axios后发送的有所不同content解析其中content 以一个WebKitFormBoundaryjWE3qXXORSg2hZiB分割进行filename、filetype、md5等信息的解析文件名拼接在经过nginx模块上传后文件统一去掉了后缀名这里找到type和filename进行拼接即可fastdfs命令上传用到了进程间通信需要执行fdfs_upload_file(指令) /etc/fdfs/client.conf(配置文件路径) 123.txt(文件)此步骤完成后可以获取到group1/M00/00/00/xxx.txtpipe(int fd[2]): 创建一个无名管道其中fd[0] 表示读端fd[1] 表示写端pid_t pid fork(): 创建子进程子进程会完全复制父进程的地址空间但是区分pid子进程pid 0则说明是子进程关闭读端保留写端将标准输出重定向到写管道父进程pid 1则说明是父进程关闭写端保留读端设置读取数据的端read(fd[0], fileid, TEMP_BUF_MAX_LEN)读取数据到fileid中wait(NULL)/close(fd[0]): 等待子进程结束并关闭挥手完整路径依旧使用父子进程方式执行命令fdfs_file_info获取ip拼接 http:// ip group1/M00/00/00/xxx.txt数据库持久化将上传文件信息插入表做持久化file_info 插入一条user_file_list 插入一条父子间进程通信的原理可以使用popen()是在fork()、pipe()之上的封装在fork()创建子进程后共享父进程的数据(也就是说父子进程皆可以访问管道的读写端持有其fd)如果是在此之前创建了pipe()那么父子进程都会有pipe读端和写端的引用如果写端引用不为0则无法在读端读取数据因此需要关闭子进程的读和父进程的写2. 注册登录

相关文章:

图床项目总结

1. fastdfs 、nginx 文件管理模块 1. 1 fastdfs 三大组件 1.1.1 tracker server 相当于一个调度器,其内部不存储文件,只存储storage 服务器相关的一些元信息(存在于内存中),通过连接storage后由storage汇报的信息生成的,根据这些…...

使用Python爬虫构建LingBot-Depth-Pretrain-ViTL-14训练数据集

使用Python爬虫构建LingBot-Depth-Pretrain-ViTL-14训练数据集 1. 项目背景与目标 LingBot-Depth-Pretrain-ViTL-14是一个先进的深度估计模型,能够将不完整和有噪声的深度传感器数据转换为高质量、精确度量的3D测量结果。要训练这样的模型,需要大量高质…...

31.命名管道——共享内存

unlink是删除管道文件命名管道,写入方没有open,那么读取方就要阻塞,知道有人打开管道看fifo代码, system v通过共享区和物理内存那块4KB进行映射,这不加载动态库,只映射空间,所以进程A&#xff…...

Junit到Springboot单元测试

第一部分 junit与springboot的前世今生一、junit4与junit5及springboot中的使用在现代软件开发中,单元测试是确保代码质量的重要环节。Spring Boot框架通过整合JUnit,为开发者提供了便捷的单元测试支持。1.1 Spring Boot中JUnit版本的变化在Spring Boot …...

GOM引擎插件加载全解析:从X-FKGOM到X-GOMPJ,如何正确配置登录器与M2插件

GOM引擎插件深度配置指南:从授权管理到功能优化全流程 在传奇私服开发领域,GOM引擎凭借其出色的画面表现和丰富的功能扩展性,已成为众多开发者的首选方案。但真正让GOM引擎从同类产品中脱颖而出的,是其强大的插件系统——通过X-FK…...

新手必看:Qwen-Image-Edit-2511-Unblur-Upscale修复模糊人像全流程详解

新手必看:Qwen-Image-Edit-2511-Unblur-Upscale修复模糊人像全流程详解 1. 为什么你需要这个工具? 你是否遇到过这样的情况:翻看老照片时发现珍贵的人像照片变得模糊不清?或者手机拍摄的照片因为手抖而变得模糊?传统…...

Dify Rerank性能翻倍实录:从0.42到0.89 NDCG提升,我们只改了这4行配置

第一章:Dify Rerank性能翻倍实录:从0.42到0.89 NDCG提升,我们只改了这4行配置在真实生产环境中对 Dify v0.12.3 的 Rerank 模块进行基准测试时,原始配置下对 1,247 条 QA 对的排序结果 NDCG5 仅为 0.42。通过深入分析 reranker 调…...

我把 VS Code 里看依赖版本的插件,做了一个更快的版本

我把 VS Code 里看依赖版本的插件,做了一个更快的版本 平时写 Node.js 项目时,我经常会在 package.json 里看看依赖有没有更新。 之前我一直在用 Version Lens 这类插件,它的体验本身是不错的:打开 package.json,就能直…...

NE2A-SCPU01安全网络控制器

NE2A-SCPU01 安全网络控制器一、产品概述NE2A-SCPU01 是一款工业级安全网络控制器,用于监控和管理工业安全系统。该控制器可集成多个安全设备(如安全传感器、急停开关、安全继电器等),实现安全逻辑运算、故障检测和系统保护&#…...

RV1126准备-----编译和测试SDK自带的RKNN例程

一、SDK自带的RKNN例程介绍位置: SDK自带的RKNN例程位于SDK的external/rknpu/rknn/rknn_api/examples目录下内容: 包含多输入示例、目标检测、批量推理、透传模式、零拷贝等不同功能的示例代码3rdparty目录:CImg: 轻量级C图像处理库,只有一个CImg.h头文件&#xff0…...

Make构建系统原理与嵌入式工程实践

1. Make 构建系统原理与工程实践在嵌入式开发流程中,从源代码到可执行镜像的转化过程包含两个关键阶段:编译(compile)与构建(build)。编译关注单个源文件如何转换为目标文件(如.o)&a…...

(二)传统企业vs数字原生企业:差距到底在数据,还是思维?

传统企业vs数字原生企业:差距到底在数据,还是思维?在上一篇博客《别再误解数字化!企业转型的核心本质,从来不是买软件》里,我们戳破了企业数字化转型的最大误区:把工具采购当成转型核心&#xf…...

如何在Java中使用字符串拼接优化性能

在Java中进行字符串拼接时,选择合适的方式对性能影响很大。由于String对象是不可变的,每次使用拼接都会创建新的String对象,频繁操作会导致大量临时对象,增加GC压力。以下是几种优化字符串拼接性能的方法。1. 使用StringBuilder进…...

Python后台任务不中断:nohup与输出缓冲的实战技巧

1. 为什么需要后台运行Python脚本 我在第一次部署机器学习模型训练任务时,就遇到了一个典型问题:本地SSH连接到远程服务器启动训练后,只要网络波动导致连接断开,训练进程就会立刻终止。这种经历相信不少开发者都遇到过——辛辛苦苦…...

基于T型三电平逆变器的下垂控制:电压电流双闭环与LCL滤波、SPWM调制仿真研究

下垂控制-基于T型三电平逆变器的下垂控制,电压电流双闭环,采用LCL滤波,SPWM调制方式 1.提供simulink仿真源文件 2.提供下垂控制原理与下垂系数计算方法 3.中点平衡控制,电压电流双闭环控制 4.提供参考文献 在现代电力系统中&#…...

从零到部署:我用SeaTable私有云为团队搭建了一个轻量级项目管理系统(附docker-compose.yml配置)

从零构建企业级项目协同平台:基于SeaTable私有云的轻量化实践指南 当团队规模扩张到10人以上时,Excel共享表格开始频繁出现版本冲突,而Jira这类专业工具又显得过于笨重。我们技术团队在尝试了市面上17种协作工具后,最终选择用SeaT…...

三月第三周周报

标题Physics-informed machine learning with embedded sediment rating curve constraints for high-fidelity multi-lead-time forecast of suspended sediment concentration背景作者Yousef Hemmatzadeh , Sadra Shadkani期刊来源Journal of hydrologyDOI10.1016/j.jhydrol.…...

FPGA千兆网硬件设计避坑指南:RTL8211EG布局布线实战经验分享

FPGA千兆网硬件设计避坑指南:RTL8211EG布局布线实战经验分享 在高速数字电路设计中,千兆以太网接口的硬件实现一直是工程师面临的挑战之一。作为FPGA与物理层之间的关键桥梁,RTL8211EG PHY芯片的布局布线质量直接影响着网络通信的稳定性和性能…...

为什么嵌入式开发离不开C语言:底层执行模型与工程实践

1. 项目概述本项目并非硬件设计实体,而是一则面向嵌入式系统工程师与底层开发者的技术科普漫画文档。其核心价值在于以可视化、具象化的方式厘清编程语言演进脉络中C语言的不可替代性,并锚定其在嵌入式领域的真实技术坐标。不同于常规开源硬件项目提供原…...

MCP 2.0生产部署安全熵值评估模型(独家):用3个量化指标预判协议层侧信道泄露风险——仅限首批200位架构师获取

第一章:MCP 2.0生产部署安全熵值评估模型的演进逻辑与核心定位MCP 2.0(Mission-Critical Platform 2.0)在金融与能源等高保障场景中承担着实时决策、多源异构数据融合与自主策略执行的关键职能。其生产部署的安全熵值评估模型并非对传统风险评…...

Kubernetes 入门:从容器到集群管理的全面指南

一、前言在云原生时代,Kubernetes(简称 K8S)已经成为容器编排的事实标准。无论是初创公司还是大型企业,都在积极采用 K8S 来管理和部署他们的应用程序。本文将带你从零开始,系统了解 Kubernetes 的核心概念、架构原理和…...

华为HCIA(华为认证ICT工程师)大纲:从零基础到网络实战的完整指南

1. 华为HCIA认证概述:网络工程师的起点 华为HCIA(华为认证ICT工程师)是华为认证体系中面向初学者的入门级认证,相当于网络工程师行业的"驾照考试"。作为华为认证金字塔的基石,HCIA认证覆盖网络技术、云计算、…...

绩效流于形式?3款HR咨询方案实测对比

一、先上硬参数:三家咨询机构核心信息对比先声明啊,这表是我跟三家机构对接企业客户反馈整理的,没水分,都是实打实的信息:机构名称核心服务模式付费方式咨询师背景售后保障适配企业类型润行咨询结果式咨询陪伴落地按月…...

仓储空间智能基础设施构建路径研究: 融合动态建模与 Pixel-to-Space 的三维空间认知与决策体系(面向“十五五”的关键技术突破与工程应用)

仓储空间智能基础设施构建路径研究 —— 融合动态建模与 Pixel-to-Space 的三维空间认知与决策体系(面向“十五五”的关键技术突破与工程应用) 一、研究背景:迈向空间智能基础设施时代 随着数字经济、智能制造与新型基础设施建设的持续推进…...

SPM新手避坑指南:手把手教你完成fMRI数据预处理(从DICOM到平滑)

SPM新手避坑指南:手把手教你完成fMRI数据预处理(从DICOM到平滑) 当你第一次打开SPM软件准备处理fMRI数据时,是否感到无从下手?作为神经影像分析的基础工具,SPM在学术研究中广泛应用,但其复杂的参…...

FPGA实战:从PWM原理到《欢乐颂》音乐播放器的设计与实现

1. 蜂鸣器与PWM基础原理 第一次接触FPGA驱动蜂鸣器时,我被这个看似简单却充满技术细节的项目深深吸引了。无源蜂鸣器就像个"挑剔的歌手",不给它合适的节奏就绝不开口。这里的关键就在于PWM(脉冲宽度调制)技术&#xff0…...

R语言实战:如何用ggplot2绘制Structure分析的DeltaK折线图

R语言实战:用ggplot2绘制Structure分析的DeltaK折线图 群体遗传学研究中,Structure软件是分析群体结构的经典工具。但如何从多次运行结果中确定最佳K值,一直是研究者面临的挑战。DeltaK方法由Evanno提出,通过计算相邻K值似然值的变…...

STM32F103RCT6+MPU6050实战:手把手教你打造自平衡麦克纳姆轮小车(附PID调参秘籍)

STM32F103RCT6MPU6050实战:从零构建自平衡麦克纳姆轮机器人 当四个麦克纳姆轮在地面划出精确的八字轨迹,车身在倾斜瞬间自动调整转速恢复平衡——这种充满未来感的运动控制,其实用一块30元的STM32开发板就能实现。本文将彻底拆解自平衡麦克纳…...

Jetson Orin NX实战:从零部署YOLOv5的完整环境配置指南

1. Jetson Orin NX与YOLOv5的黄金组合 如果你正在寻找一款能在边缘设备上高效运行目标检测的解决方案,Jetson Orin NX搭配YOLOv5绝对是当前最热门的选择之一。作为NVIDIA最新推出的边缘计算平台,Jetson Orin NX凭借其强大的AI算力和能效比,已…...

基于springboot大数据爬虫二手车管理系统平台设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...