FastDFS的上传与下载
1 安装
1.1 安装gcc(编译时需要)
yum install -y gcc gcc-c++
1.2 安装libevent(运行时需求)
yum -y install libevent
1.3 安装 libfastcommon
libfastcommon
是
FastDFS
官方提供的,
libfastcommon
包含了
FastDFS
运行所需要的一些基础库。
1.
上传
libfastcommon-master.zip
到
/opt
安装解压zip包的命令: yum install -y unzip
解压包: unzip libfastcommon.zip
进入目录: cd libfastcommon-master
2.
编译
./make.sh
- 如果:make.sh的权限不够,则需要授权(可执行的权利)
chmod 777 make.sh
3.
安装
./make.sh install
- libfastcommon安装好后会在/usr/lib64 目录下生成 libfastcommon.so 库文件
4. 拷贝库文件
cd /usr/lib64
cp libfastcommon.so /usr/lib
1.4 安装Tracker
下载 FastDFS_v5.05.tar.gz,并上传到 /opt
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install
安装成功将安装目录下的
conf
下的文件拷贝到
/etc/fdfs/
下
cp /opt/FastDFS/conf/* /etc/fdfs/
2 配置
- Tracker配置
vim /etc/fdfs/tracker.conf
#端口号
port=22122
#基础目录(Tracker运行时会向此目录存储storage的管理数据)(基础目录不存在的话,需要自行创建 mkdir /home/fastdfs)
base_path=/home/fastdfs
- Storage配置
#配置组名
group_name=group1
#端口
port=23000
#向tracker心跳间隔(秒)
heart_beat_interval=30
#storage基础目录 #目录不存在,需要自行创建
base_path=/home/fastdfs
#store存放文件的位置(store_path)
#可以理解一个磁盘一个path,多个磁盘,多个store_path
#fdfs_storage目录不存在,需要自行创建
#mkdir /home/fastdfs/fdfs_storage
store_path0=/home/fastdfs/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=..... (M01)
#store_path2=..... (M02)
#配置tracker服务器:IP
tracker_server=192.168.58.222:22122
#如果有多个则配置多个tracker
#tracker_server=192.168.58.x:22122
3 启动服务
- 启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
- 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
- 查看所有运行的端口:
netstat -ntlp
4 搭建 Java工程
4.1 pom.xml
<dependencies>
<!--fastdfs的java客户端-->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
4.2 创建配置文件
在resources下创建config目录,在config目录下创建 fastdfs-client.properties,内容如下:
##fastdfs-client.properties
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=80
fastdfs.tracker_servers=192.168.58.222:22122
4.3 文件上传
package test;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
/*
* 文件上传
* */
public class TestUpload {
public static void main(String[] args) {
try {
// 加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 创建tracker客户端
TrackerClient trackerClient = new TrackerClient();
// 通过tracker客户端获取服务并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 声明storage服务
StorageServer storageServer = null;
// 定义storage客户端
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
// 定义文件元信息
NameValuePair[] list = new NameValuePair[1];
list[0] = new NameValuePair("fileName","1.jpg");
String fileId = client.upload_file1("E:\\java_work\\TheThirdWork\\code 1\\img\\book-01.jpg", "jpg", list);
System.out.println("fileId = "+ fileId);
// group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg
/*
group1:一台服务器,就是一个组
M00: store_path0 ----> /home/fastdfs/fdfs_storage/data
00/00:两级数据目录
*/
trackerServer.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
4.4 文件查询
package test;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import java.io.IOException;
/*
* 文件查询
* */
public class TestQuery {
public static void main(String[] args) throws Exception {
// 加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 创建tracker客户端
TrackerClient trackerClient = new TrackerClient();
// 通过tracker客户端获取服务并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 声明storage服务
StorageServer storageServer = null;
// 定义storage客户端
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
FileInfo fileInfo = client.query_file_info1("group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg");
if (fileInfo != null){
System.out.println(fileInfo);
} else {
System.out.println("查无此件");
}
trackerServer.close();
}
}
4.5 文件下载
package test;
import org.csource.fastdfs.*;
import java.io.File;
import java.io.FileOutputStream;
/*
* 文件下载
* */
public class TestDownload {
public static void main(String[] args) throws Exception {
// 加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 创建tracker客户端
TrackerClient trackerClient = new TrackerClient();
// 通过tracker客户端获取服务并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 声明storage服务
StorageServer storageServer = null;
// 定义storage客户端
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
byte[] bytes = client.download_file1("group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg");
// 通过io将字节数组,转换成一个文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:/xxxx.jpg"));
fileOutputStream.write(bytes);
fileOutputStream.close();
trackerServer.close();
System.out.println("下载完毕");
}
}