FastDfs文件服务器安装
官方FasDfs 的SDK地址
https://github.com/happyfish100/fastdfs-client-java
FastDfs安装环境(CentOs7)
第一步
安装gcc环境
yum install gcc-c++ -y
安装libevent
yum -y install libevent
安装perl库
yum install perl*
整体命令
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
安装libfastcommon依赖地址
https://github.com/happyfish100/libfastcommon
1、上传libfastcommo.tar.gz 到/opt 目录下 并解压
tar -zxvf libfastcommo.tar.gz
2、进入到解压目录进行编译和安装
./make.sh
./make.sh install
3、libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
cp /usr/lib64/libfastcommon.so /usr/lib/
第二步
安装tracker
https://github.com/happyfish100/fastdfs
1、上传 fastdfs.tar.gz 到 /opt目录下
2、解压编译安装
2.1、tar -zxvf FastDFS_v5.05.tar.gz
2.2、cd FastDFS
2.3、./make.sh
2.4、./make.sh install
2.5、安装成功之后,将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
2.6、cd conf
2.7、cp * /etc/fdfs/
3、修改配置文件
3.1 vi /etc/fdfs/tracker.conf
3.2、vi /etc/fdfs/storage.conf
创建fastdfs文件夹
mkdir /opt/fastdfs
mkdir /opt/fastdfs/fdfs_storage
设置启动项
进入/etc/init.d启动脚本目录,默认fastdfs已经生成
修改 fdfs_trackerd 文件
vi fdfs_trackerd
修改 fdfs_storage 文件
vi /etc/init.d/fdfs_storage
创建fdfs文件夹
mkdir /usr/local/fdfs
cd /opt/FastDFs
cp restart.sh /usr/local/fdfs/
cp stop.sh /usr/local/fdfs/
将启动脚本加入linux服务
cd /etc/init.d
chkconfig --add fdfs_trackerd
chkconfig --add fdfs_storaged
启动服务
service fdfs_trackerd start
service fdfs_storaged start
fastdfs-nginx-module整合nginx插件
https://github.com/happyfish100/fastdfs-nginx-module
上传fastdfs-nginx-module.tar.gz上传到 /opt ,并解压 ,编辑被配置文件修改config文件 将/usr/local路径改成/usr
vi fastdfs-nginx-module/src/config
将fastdfs-nginx-module/src 下的 mod_fastdfs.conf 拷贝至 /etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
修改mod_fastdfs.conf
vi /etc/fdfs/mod_fastdfs.conf
将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
安装nginx
http://nginx.org/
创建nginx/client 目录
mkdir -p /var/temp/nginx/client
上传nginx到/opt目录下并解压,进入到文件目录下添加fastdfs-nginx-module模块
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src
配置成功
编译和安装
make
make install
编辑nginx.conf
vi /usr/local/nginx/conf/nginx.conf
启动nginx
/usr/local/nginx/sbin/nginx
上传测试
修改 /etc/fdfs/client.conf
vi /etc/fdfs/client.conf
比如将 /root 下的1.png 上传到FastDFS中 :
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/1.png
访问路径http://192.168.1.157/group1/M00/00/09/wKgBnV4hObiAHIQZAAAqVjatUNg628.png
Spring Boot整合fastdfs
下载fastdfs-client-java 添加到项目module下
在pom文件中添加依赖
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.29-SNAPSHOT</version>
</dependency>
在启动类的resources目录下创建tracker.conf
#文件服务器地址
tracker_server=192.168.1.157:22122
# 连接超时时间,针对socket套接字函数connect,默认为30秒
connect_timeout=30000
# 网络通讯超时时间,默认是60秒
network_timeout=60000
文件上传和文件删除工具类
/**
* @author YLY
* @Date 2019/11/13
*/
public class FileUploadUtil {
/**
* 文件上传
*
* @param multipartFile
* @return
*/
public static String uploadImage(MultipartFile multipartFile) {
String imgUrl = "http://192.168.1.157";
// 上传图片到服务器
// 配置fdfs的全局链接地址
// 获得配置文件的路径
String tracker = FileUploadUtil.class.getResource("/tracker.conf").getPath();
try {
ClientGlobal.init(tracker);
} catch (Exception e) {
e.printStackTrace();
}
TrackerClient trackerClient = new TrackerClient();
// 获得一个trackerServer的实例
TrackerServer trackerServer = null;
try {
trackerServer = trackerClient.getTrackerServer();
} catch (IOException e) {
e.printStackTrace();
}
// 通过tracker获得一个Storage链接客户端
StorageClient storageClient = new StorageClient(trackerServer, null);
try {
// 获得上传的二进制对象
byte[] bytes = multipartFile.getBytes();
// 获得文件后缀名
String originalFilename = multipartFile.getOriginalFilename();
int i = originalFilename.lastIndexOf(".");
String extName = originalFilename.substring(i + 1);
String[] uploadInfos = storageClient.upload_file(bytes, extName, null);
for (String uploadInfo : uploadInfos) {
imgUrl += "/" + uploadInfo;
}
} catch (Exception e) {
e.printStackTrace();
}
return imgUrl;
}
/**
* 删除文件
*
* @param groupName 文件组名 group1
* @param fileId 文件id group1/M00/00/00/wKgBvV34ZCqAGVe1AACWfTh8WzQ38.docx
* @return 删除成功返回0,非0则操作失败,返回错误代码
*/
public static int delete(String groupName, String fileId) {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = null;
StorageServer storageServer = null;
StorageClient1 storageClient1 = null;
try {
trackerServer = trackerClient.getTrackerServer();
if (trackerServer == null) {
}
storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
storageClient1 = new StorageClient1(trackerServer, storageServer);
return storageClient1.delete_file1(fileId);
} catch (Exception ex) {
return 1;
}
}
}
开放端口号22122、23000
- 查看开放的端口号
- [root@localhost sbin]# firewall-cmd --list-all
- 设置开放的端口号
- [root@localhost sbin]# firewall-cmd --add-port=80/tcp --permanent
- 重启防火墙
- [root@localhost sbin]# systemctl reload firewalld.service