使用VirtualBox虚拟机在CentOS 7系统上安装FastDFS
FastDFS安装配置参考资料分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置由于此处是使用VirtualBox虚拟机在CentOS 7系统上安装FastDFS,故应先配置VirtualBox网络java 项目中需要引用fastdfs-cli
由于本文是根据多次环境搭建而成的,导致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
当libfastcommon
和fastdfs
都安装完成后,在usr/lib
和usr/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);
}
}
更多推荐
所有评论(0)