由于本文是根据多次环境搭建而成的,导致tracker_server的属性值在本文多个地方出现不一致情况,请不要误解,tracker_server在整个环境的值都需要保持一致

FastDFS安装配置参考资料
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置
用FastDFS一步步搭建文件管理系统
FastDFS配置详解之Storage配置
fastdfs 原理与过程
FastDFS原理系列文章
FastDFS分布式文件系统

由于此处是使用VirtualBox虚拟机在CentOS 7系统上安装FastDFS,故应先配置VirtualBox网络,实现宿主机和虚拟机互通且虚拟机能够访问外网

VirtualBox 网络配置
在这里插入图片描述

在这里插入图片描述

宿主机的网络使用的是wifi
在这里插入图片描述

单个虚拟机实例网络配置
在这里插入图片描述
在这里插入图片描述
查看虚拟机的本机ip
在这里插入图片描述

给虚拟机配置静态ip地址
在这里插入图片描述
打开ifcfg-enp0s3,编辑BOOTPROTO的属性值为static,并配置IPADDR等信息
编辑前
在这里插入图片描述
编辑后
在这里插入图片描述
上图是后来补充的,导致此图中的IPADDR的属性值与本文其它图片中的值不一致,此属性的值应为前面使用ifconfig命令看到的虚拟机ip

修改配置文件后需要重新网络服务
在这里插入图片描述
关闭防火墙
在这里插入图片描述

fastdfs的编译依赖于gcc环境,故需先安装gcc环境
在这里插入图片描述

安装libfastcommon
github上的项目路径
在这里插入图片描述
下载libfastcommon源码
在这里插入图片描述

git clone https://github.com/happyfish100/libfastcommon.git

若还未安装git可以使用如下命令进行安装

yum –y install git

下载好的libfastcommon
在这里插入图片描述
进入该文件夹得根目录
在这里插入图片描述
分别执行以下两个命令

./make.sh
./make.sh install

在这里插入图片描述

下载fastdfs源码

git clone https://github.com/happyfish100/fastdfs.git 

在这里插入图片描述
进入fastdfs目录分别执行以下两个命令

./make.sh
./make.sh install

libfastcommonfastdfs都安装完成后,在usr/libusr/lib64这两个目录下都新增了两个文件
在这里插入图片描述
在这里插入图片描述

fastdfs的配置文件是在/etc/fdfs这个目录下的
在这里插入图片描述
这些文件都是官方提供的示例,我们将复制这些文件并做相应调整
复制命令

cp client.conf.sample client.conf

在这里插入图片描述
配置fastdfs跟踪服务器(Tracker)
新建一个文件夹用来保存跟踪服务器的数据文件和日志文件

mkdir /opt/fastdfs_tracker

编辑tracker.conf文件

vim tracker.conf

修改内容如下

base_path=/opt/fastdfs_tracker
http.server_port=6666

启动跟踪服务器

service fdfs_trackerd start

配置fastdfs的存储服务器(Storage)
创建两个文件,一个用来保存数据和日志,另一个用来存储具体的附件(图片或文件)

mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

编辑storage.conf,修改如下内容

base_path=/opt/fastdfs_storage
store_path0=/opt/fastdfs_storage_data 
tracker_server=192.168.1.111:22122 

tracker_server配置的是跟踪服务的ip和端口号

启动存储服务器(Storage)

service fdfs_storaged start

在这里插入图片描述

修改client.conf配置文件

base_path=/opt/fastdfs_tracker  
tracker_server=192.168.1.111:22122          
http.tracker_server_port=6666  

tracker_server 配置跟踪服务器的ip和地址
http.tracker_server_port 指tracker.conf中配置http.server_port属性的端口号
base_path 指我们创建的用于保存跟踪服务器的数据和日志文件路径

下面两张图中tracker_server的值为tracker服务器的地址+ip
由于本文是根据多次环境搭建而成的,导致本文中的tracker_server的值存在冲突,希望不要误解。实验时请保持一致!!!
在这里插入图片描述

在这里插入图片描述

使用fastdfs自带的测试工具测试文件上传
在这里插入图片描述

在这里插入图片描述

使用java代码测试fastdfs文件上传
在这里插入图片描述

在这里插入图片描述

java 项目中需要引用fastdfs-client,项目路径为:https://github.com/happyfish100/fastdfs-client-java

我使用的单元测试类及其配置文件
https://download.csdn.net/download/quan20111992/10683861

附单元测试代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;


public class FastdfsTest {

	StorageClient storageClient = null;
	
	@Before
	public void init() throws FileNotFoundException, IOException, MyException {
		//1、初始化全局配置。加载一个配置文件。
		ClientGlobal.init("src\\test\\resources\\conf\\fdfs_client.properties");
		//2、创建一个TrackerClient对象。
		TrackerClient trackerClient = new TrackerClient();
		//3、创建一个TrackerServer对象。 此处与封装的有区别,无参
		TrackerServer trackerServer = trackerClient.getConnection();
		//4、声明一个StorageServer对象,null。
		StorageServer storageServer = null;
		//此步可省
		storageServer = trackerClient.getStoreStorage(trackerServer);
		//5、获得StorageClient对象。
		storageClient = new StorageClient(trackerServer,storageServer);
	}
	
	//上传文件
	@Test
	public void testUploadFile() throws Exception{
		
		File file = new File("C:\\Users\\issuser\\Desktop\\测试.doc");
		InputStream fileInputStream = new FileInputStream(file);
		
		byte[] content = new byte[fileInputStream.available()];
		fileInputStream.read(content);
		
	    String[] strings=	storageClient.upload_file(content, "", null);
	    for(String string:strings)
	    {
	    	System.out.println(string);
	    }
	}
	
	//上传图片
	@Test
	public void testUploadImage() throws Exception{
		File file = new File("C:\\Users\\issuser\\Desktop\\23.png");
		InputStream fileInputStream = new FileInputStream(file);
		
		byte[] content = new byte[fileInputStream.available()];
		fileInputStream.read(content);
		
	    String[] strings=	storageClient.upload_file(content, "png", null);
	    for(String string:strings)
	    {
	    	System.out.println(string);
	    }
	}
	
	@Test
	public void testDownloadFile() throws Exception{
		
		storageClient.download_file("group1", "M00/02/B8/ChwTkluOYq6AYmPLAAAmABYltCY0822414", "C:\\Users\\issuser\\Desktop\\测试23.doc");
	}
	
	@Test
	public void testDownloadFileByByte() throws Exception{
		byte[] fileContent = storageClient.download_file("group1", "M00/02/B8/ChwTkluOYq6AYmPLAAAmABYltCY0822414");
		
		File file = new File("C:\\Users\\issuser\\Desktop\\测试24.doc");
		
		FileOutputStream out = new FileOutputStream(file);
		
		out.write(fileContent);
	}
	
	
	//上传文件 含属性
	@Test
	public void testUploadFileIncludeProperty() throws Exception{
		
		File file = new File("C:\\Users\\issuser\\Desktop\\测试.doc");
		InputStream fileInputStream = new FileInputStream(file);
		
		byte[] content = new byte[fileInputStream.available()];
		fileInputStream.read(content);
		
		NameValuePair nameValuePair = new NameValuePair("fileName", "测试.doc");
		
	    String[] strings=	storageClient.upload_file(content, "", new NameValuePair[] {nameValuePair});
	    for(String string:strings)
	    {
	    	System.out.println(string);
	    }
	}
	
	//获取元数据
	@Test
	public void testGetMetaData() throws IOException, MyException {
		
		NameValuePair[] nameValuePairs = storageClient.get_metadata("group1", "M00/02/B8/ChwTkluOjryAJzF8AAAmABYltCY8291177");
		
		for(NameValuePair nameValuePair : nameValuePairs) {
			System.out.println(nameValuePair.getName() + " " + nameValuePair.getValue());
		}
		
	}
	
	//删除
	@Test
	public void testDelete() throws IOException, MyException {
		int resultCode = storageClient.delete_file("group1", "M00/00/00/wKgBbFumZFiAR7YxAAAmAMHkUqg1369529");
		
		Assert.assertEquals(0, resultCode);
	}
	
	//获取文件信息
	@Test
	public void testGetFileInfo() throws IOException, MyException {
		FileInfo fileInfo = storageClient.get_file_info("group1", "M00/02/B8/ChwTkluOYq6AYmPLAAAmABYltCY0822414");
		
		System.out.println(fileInfo);
	}

}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐