当前位置:   article > 正文

FastDFS文件上传详细步骤_fastdfs 上传文件

fastdfs 上传文件

介绍

fastDFS是一个开源的分布式文件系统框架,实现了冗余备份、负载均衡、线性扩容等机制,可以很方便的用来搭建图床、网盘。
该框架包含3个角色:追踪器、存储节点、客户端。
客户端上传文件:客户端连接追踪器,询问它哪个存储节点容量充足,追踪器返回存储节点的ip端口,客户端连接存储节点,将文件发送给存储节点。
客户端下载文件:也是先问追踪器
追踪器集群:用多个追踪器,轮询工作,避免单点故障
存储节点集群:横向扩容(增加新的组,容量增加),纵向扩容(新主机增加到已有的组中,冗余备份)

fastDFS配置文件

配置文件默认位置: /etc/fdfs

  1. tracker 配置文件

    # 将追踪器和部署的主机的IP地址进程绑定, 也可以不指定
    # 如果不指定, 会自动绑定当前主机IP, 如果是云服务器建议不要写
    bind_addr=192.168.247.135
    # 追踪器监听的端口
    port=22122
    # 追踪器存储日志信息的目录, xxx.pid文件, 必须是一个存在的目录
    base_path=/home/yuqing/fastdfs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  2. storage 配置文件

    # 当前存储节点对应的主机属于哪一个组
    group_name=group1
    # 当前存储节点和所应该的主机进行IP地址的绑定, 如果不写, 由fastdfs自动绑定
    bind_addr=
    # 存储节点绑定的端口
    port=23000
    # 存储节点写log日志的路径
    base_path=/home/yuqing/fastdfs
    # 存储节点提供的存储文件的路径个数
    store_path_count=2
    # 具体的存储路径
    store_path0=/home/yuqing/fastdfs
    store_path1=/home/yuqing/fastdfs1
    # 追踪器的地址信息
    tracker_server=192.168.247.135:22122 
    tracker_server=192.168.247.136:22122 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  3. 客户端配置文件

    # 客户端写log日志的目录
    base_path=/home/yuqing/fastdfs
    # 要连接的追踪器的地址信息
    tracker_server=192.168.247.135:22122 
    tracker_server=192.168.247.136:22122 
    
    • 1
    • 2
    • 3
    • 4
    • 5

上传下载的常用命令

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./test.txt

一、直接改写fdfs_upload_file.c

fastdfs的client源代码

//将函数参数这样改写
/*
参数:client配置文件路径,要上传文件的路径,传出参数fildID
*/
int upload_file1(const char* confFile, const char* myFile, char* fileID)
  • 1
  • 2
  • 3
  • 4
  • 5

二、使用多进程的方式实现

1.创建匿名管道

int fd[2];
int ret = pipe(fd);//fd[0]为读端,fd[1]为写端
  • 1
  • 2

2.创建子进程

子进程调用fdfs_upload_file上传文件,将返回值fileID写入管道
  • 1
pid_t pid = fork();
if(pid == -1)//子进程:执行上传,将结果写入管道
{
	dup2(fd[1], STDOUT_FILENO);//将输出文件描述符重定向到管道写端
	close(fd[0]);//关闭管道读端
	//执行命令
		//要执行的文件名	//占位随便写 //fdfs_upload_file()的参数 //最后必须写一个NULL
	execlp("fdfs_upload_file", "xxx", confFile, uploadFile, NULL);
	perror("execlp error");//如果上面执行成功,改行就不会被执行到
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
父进程读管道,并回收已结束的子进程资源
  • 1
else//父进程:读管道
{
	close(fd[1]);
	read(fd[0], fileID, size);

	//回收子进程pdb
	wait(NULL);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、测试代码

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "fdfs_upload.h"

int main(int argc, const char* argv[])
{
    char fileID[1024] = {0};
    upload_file1("/etc/fdfs/client.conf", "main.c", fileID);//上传main.c,
    printf("fileID:%s\n", fileID);
    printf("================\n");
    upload_file2("/etc/fdfs/client.conf", "main.c", fileID, sizeof(fileID));
    printf("fileID:%s\n", fileID);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

首先要启动追踪器和存储节点

fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged /etc/fdfs/storage.conf
  • 1
  • 2

确认是否启动成功

ps aux|grep fdfs_

book       6636  0.0  0.0 146464  2300 ?        Sl   22:49   0:00 fdfs_trackerd /etc/fdfs/tracker.conf
book       6793  0.0  0.0  82976  3464 ?        Sl   22:50   0:00 fdfs_storaged /etc/fdfs/storage.conf
book       6877  0.0  0.0  14432  1100 pts/5    S+   22:51   0:00 grep --color=auto fdfs_
  • 1
  • 2
  • 3
  • 4
  • 5

编译程序

gcc *.c -I/usr/include/fastdfs -I/usr/include/fastcommon -lfdfsclient
  • 1

运行结果

group1/M00/00/00/wKjohGS_Ow-APPmXAAAB9UADL_o12999.c
fileID:group1/M00/00/00/wKjohGS_Ow-APPmXAAAB9UADL_o12999.c
================
fileID:group1/M00/00/00/wKjohGS_Ow-APPmXAAAB9UADL_o12999.c
fileID:group1/M00/00/00/wKjohGS_Ow-APPmXAAAB9UADL_o12999.c
  • 1
  • 2
  • 3
  • 4
  • 5

下图可以看到,文件确实上传到了存储节点上

book@100ask:~/yxfastdfs/storage/data/00/00$ ls
wKjohGS41yWAYpzdAAAAP6-7kx419886.c  wKjohGS_Ow-APPmXAAAB9UADL_o12999.c
wKjohGS_OeuAbY60AAAB6T_sW7I73143.c  wKjohGS_OXuAY49PAAAB6T_sW7I42849.c
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/724560
推荐阅读
相关标签
  

闽ICP备14008679号