
一.环境准备本教程由 Scorpion 编写,转载请声明
软件下载: https://pan.baidu.com/s/1U7VrHt6euWIq2vY9ohB_Tg 提取码:rcik
CentOS Linux 7.3.1611 (使用Centos7.x都行吧)
宝塔免费版6.9.9
通过宝塔面板编译安装 Nginx 1.16
libfastcommon-1.0.36.zip
fastdfs-5.11.zip
fastdfs-nginx-module-1.20.zip
三.阿里云服务器上的操作本教程参考
CentOS7搭建FastDFS V5.11分布式文件系统
https://www.cnblogs.com/guigujun/p/7804670.html
本人使用的是阿里云服务器,配置上和上面教程略有不同
阿里防火墙 开放端口 TCP 8080 22122 23000 等,记得开放要用的端口,否则后面操作失败
由于有了阿里云防火墙,所以服务器上的防火墙基本都不想开了,
因为如果开放一个端口,要改阿里防火墙和服务器防火墙 2个地方,
太繁琐了,所以可以使用以下命令禁用服务器自身的防火墙
# 关闭防火墙 systemctl stop firewalld.service # 禁止防火墙开机自启 systemctl disable firewalld.service1 安装libfastcommon
使用软件上传所有FastDFS软件到服务器的 /home/temp目录上
上传文件的软件可使用: WinSCP
/home/temp目录自己建立
cd /home/temp/ # 解压所有的压缩包 unzip libfastcommon-1.0.36.zip unzip fastdfs-5.11.zip unzip fastdfs-nginx-module-1.20.zip # 安装fastdfs的环境 cd libfastcommon-1.0.36 ./make.sh ./make.sh install #建立软链接 ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so2 安装FastDFS
# 安装FastDFS cd /home/temp/fastdfs-5.11 ./make.sh ./make.sh install #从样本中拷贝配置文件 cd /etc/fdfs/ cp client.conf.sample client.conf cp storage.conf.sample storage.conf cp tracker.conf.sample tracker.conf3 安装tracker
# 一并把后面要的所有目录创建 mkdir /opt/fastdfs_tracker mkdir /opt/fastdfs_storage mkdir /opt/fastdfs_storage_data ****************************************** # 配置文件 tracker vim /etc/fdfs/tracker.conf # 关注以下配置 disabled=false port=22122 #默认端口号 base_path=/opt/fastdfs_tracker #自己刚创建的目录 http.server_port=8080 #默认端口是8080 #bind_addr 留空即可,不写则任何人都可以访问 bind_addr= # 查看支持命令 ,常用的有 start,stop,status service fdfs_trackerd # 启动tracker,这里显示ok还不行,还得看下面的监听端口看不看得到 service fdfs_trackerd start # 开机自启动 echo "service fdfs_trackerd start" |tee -a /etc/rc.d/rc.local #查看tracker监听端口 # 这里必须看到 tracker的监听端口,否则请检查上面的操作 netstat -unltp|grep fdfs4 安装storage
***************************** # 配置文件 storage vim /etc/fdfs/storage.conf # 注意下列配置 disabled=false group_name=group1 #组名,根据实际情况修改 port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录 store_path_count=1 #存储路径个数,需要和store_path个数匹配 store_path0=/opt/fastdfs_storage_data #实际文件存储路径 tracker_server=公网IP:22122 #阿里云服务器的公网IP 8.http.server_port=8888 #设置 http 端口号 # 创建软引用 ln -s /usr/bin/fdfs_storaged /usr/local/bin #启动storage ,这里ok还不行,必须看到storage的监听端口才行 service fdfs_storaged start #开机自启动 storage echo "service fdfs_storaged start" |tee -a /etc/rc.d/rc.local # 看一下是否有tracker和storage的2个监听端口,否则请检查上面操作 netstat -unltp | grep fdfs5 校验整合
# 整合校验,如果校验失败,请返回前面检查错误 /usr/bin/fdfs_monitor /etc/fdfs/storage.conf # 看到以下重要信息即成功, ACTIVE 活动中 tracker server is 公网IP:22122 Storage 1: # Storage 的数字任意,主要看到自己的公网IP ACTIVE 就行 id = 公网IP ip_addr = 公网IP ACTIVE6 配置客户端
vim /etc/fdfs/client.conf # 注意以下配置 base_path=/opt/fastdfs_tracker #tracker服务器文件路径 tracker_server=公网IP:22122 #tracker服务器IP地址和端口号 http.tracker_server_port=8080 # tracker 服务器的 http端口号,必须和tracker的设置对应起来7 模拟上传/下载
使用 WinSCP 软件上传一张测试图片到 /home/test/目录下
# 图片 /home/temp/test.jpg #上传图片 fdfs_upload_file /etc/fdfs/client.conf /home/temp/test.jpg # 看到group1/M00/00/00字眼即成功了,这个信息后面有用 # group1/M00/00/00/rBSEOVoC2QCAJVdoAAFeVJMpopw987.png #下载图片 fdfs_download_file group1/M00/00/00/rBSEOVoC2QCAJVdoAAFeVJMpopw987.png #查看当前路径下有没有图片 rBSEOVoC2QCAJVdoAAFeVJMpopw987.png ls四.Java程序进行上传/下载测试
1 pom.xml坐标使用Eclipse的 Maven工程
junit junit 4.12 test org.csource fastdfs-client-java 1.27-SNAPSHOT
2 配置文件这里会有一个错误,无法引入fastdfs-client-java
参考以下网址引入该包https://blog.csdn.net/qq_41840847/article/details/93133865
src/test/resource下新建一个
fastdfs_client.conf
内容如下
tracker_server=公网IP:221223 程序主体
package fastdfsTest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.junit.Test;
public class FastDFSTest {
private String config_path = null;
{
// 获取 fastdfs_client.conf 文件的路径
config_path = this.getClass().getResource("/fastdfs_client.conf").getPath();
}
@Test
public void testUpload() throws IOException, MyException {
// 初始化客户端全局信息
ClientGlobal.init(config_path);
// 创建 StroageClient对象
StorageClient storageClient = new StorageClient();
// 上传文件,并返回文件在服务器中的组名和文件id
// upload_file(图片的绝对路径,图片后缀类型,null)
String[] arr = storageClient.upload_file("E:\Material\Image\pretty.png", "png", null);
// 验证是否成功
System.out.println(Arrays.toString(arr));
// 返回结果 [group1, M00/00/00/rBE4UF2JxZ2AOvQ-ABVkyonzKRI078.png]
}
@Test
public void testDownload() throws IOException, MyException {
// 初始化客户端全局信息
ClientGlobal.init(config_path);
// 创建 StroageClient对象
StorageClient storageClient = new StorageClient();
// 下载文件, 把刚才上传的图片下载回来
// download_file(组名,图片名) 填入的都是上面上传时返回的信息
byte[] data = storageClient.download_file("group1", "M00/00/00/rBE4UF2JxZ2AOvQ-ABVkyonzKRI078.png");
// 将数据写入本地磁盘中
FileOutputStream fos = new FileOutputStream("D:/pretty.png");
fos.write(data);
fos.close();
}
}
4 进行单元测试
testUpload() --> 右键 -->Run as–>Junit Test
testDownload–>右键–>Run as–>Junit Test