安装fastDFS
创建目录
mkdir -p /usr/local/fastdfs
上传需要的压缩包
链接: https://pan.baidu.com/s/1vEbDkDWa0HU926NII-qC1Q?pwd=fast 提取码: fast
解压
因为fastDFS是c语言开发的所以需要下载依赖 执行下面的命令
yum -y install cmake make gcc-c++
进入libfastcommon-1.0.43目录 按照顺序执行下面的五个命令
./make.sh
./make.sh install
# 下面三个命令是挂在软连接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
进入/usr/local/fastdfs/fastdfs-6.06目录下编辑make.sh文件,改为/usr/local
然后执行下面两个命令
./make.sh
./make.sh install
执行完成之后启动脚本会生成在/etc/init.d目录下
配置文件模版会在/etc/fdfs目录下生成(.conf结尾的是我复制出来的,后续修改这个配置文件就可以)
配置tracker
进入/etc/fdfs目录vim tracker.conf,进行如下修改,然后别忘记保存之后退出,然后创建这个目录
进入/etc/init.d目录执行下面的命令启动
./fdfs_trackerd start
ps 查看进程是否正常
配置storaged
进入/etc/fdfs目录 vim storaged.conf文件进行如下修改,别忘记保存退出,然后创建对应的两个目录,tracker_server 需要一个就可以,注释一个,然后把剩下的ip需要修改成本机ip,linux查看本机ip命令是ifconfig(第二个目录就是上传文件要保存的目录)
然后进入/etc/init.d目录执行下面的命令启动storaged
./fdfs_storaged start
ps查看进程是否正常
然后可以进入到我们创建的目录中查看日志是否正常
配置Client
进入/usr/fdfs目录vim client.conf (别忘记创建目录)
测试文件上传
进入/usr/local/fastdfs/fastdfs-6.06/client
有上面这么多脚本这里就不多介绍了,可以自己去查每个具体的用法,测试上传下载是fdfs_upload_file,fdfs_download_file,还有删除fdfs_delete_file
安装Nginx
进入/usr/local/fastdfs/fastdfs-nginx-module-1.22/src目录 vim config
执行下面的命令安装依赖
yum install -y gcc gcc-c++ make automake autoconf libtool pcre zlib-devel openssl openssl-devel
执行这个命令创建目录mkdir -p /var/temp/nginx
进入/usr/local/fastdfs/nginx-1.21.5目录,直接复制下面的命令,粘贴到命令行中,回车执行
./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=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src
命令执行完成之后然后在按照顺序执行下面两个命令
make
make install
nginx配置
进入/usr/local/fastdfs/fastdfs-nginx-module-1.22/src目录执行下面的命令进行拷贝
cp mod_fastdfs.conf /etc/fdfs
进入/etc/fdfs对这个配置文件进行如下修改
修改完成之后保存退出执行下面的两个命令在复制配置文件
cp /usr/local/fastdfs/fastdfs-6.06/conf/http.conf /etc/fdfs/
cp /usr/local/fastdfs/fastdfs-6.06/conf/mime.types /etc/fdfs/
执行下面的命令创建nginx启动的软连接
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so
ln -s /fastdfs/storage/store/data /fastdfs/storage/store/data/M00
进入/usr/local/nginx/conf目录vim nginx.conf进行如下编辑
都修改完成之后需要重启storaged
进入/etc/init.d目录执行下面两个命令
./fdfs_storaged stop
./fdfs_storaged start
进入/usr/local/nginx/sbin目录执行下面命令启动nginx
./nginx
所有服务都已经启动可以上传文件,上传文件命令如下
/usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf 文件名
Java操作fastDFS的demo
创建项目
导入maven依赖
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
</dependency>
如果报红,下载不下来,就下载下面的压缩包,把jar包放到自己maven的.m2文件夹下
链接: https://pan.baidu.com/s/1G_Ii3v4ykaZ0m8zXbk0bNQ?pwd=fast 提取码: fast
添加下面的配置
#连接超时
connect_timeout = 2
#网络超时
network_timeout = 30
#编码格式
charset = UTF-8
#tracker端口
http.tracker_http_port = 8080
#防盗链功能
http.anti_steal_token = no
#密钥
http.secret_key = FastDFS1234567890
#tracker ip/port
tracker_server = 114.55.142.184:22122
#连接池配置
connection_pool.enabled = true
connection_pool.max_count_per_entry = 500
connection_pool.max.idle_time = 3600
connection_pool.max_wait_time_in_ms = 1000
创建实体类
创建工具类
package com.bryce.fastdemo.utils;
import com.bryce.fastdemo.pojo.FastDFSFile;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.core.io.ClassPathResource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FastDFSClient {
private static Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
/**
* 读取配置文件,并初始化对应的属性
*/
static {
try {
String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
ClientGlobal.init(filePath);
} catch (Exception e) {
logger.error("FastDfs Client init Fail!",e);
}
}
/**
* 生成storage客户端
* @return
* @throws IOException
*/
private static StorageClient getStorageClient() throws IOException {
TrackerServer trackerServer = getTrackerServer();
StorageClient storageClient = new StorageClient(trackerServer,null);
return storageClient;
}
/**
* 生成tracker服务器端
* @return
*/
private static TrackerServer getTrackerServer() throws IOException {
TrackerClient trackerClient = new TrackerClient();
return trackerClient.getConnection();
}
/**
* 文件上传
* @param file
* @return
*/
public static String[] upload(FastDFSFile file){
logger.info("File Name:"+file.getName());
NameValuePair[] meta_list = new NameValuePair[1];
meta_list[0] = new NameValuePair("author",file.getAuthor());
long startTime = System.currentTimeMillis();
String[] uploadResults = null;
StorageClient storageClient = null;
try {
storageClient = getStorageClient();
uploadResults = storageClient.upload_file(file.getContent(),file.getExt(),meta_list);
} catch (Exception e) {
logger.error("上传失败:"+e);
}
logger.info("上传时间:"+(System.currentTimeMillis()-startTime)+"ms");
if (uploadResults==null&&storageClient!=null){
logger.error("上传失败:"+storageClient.getErrorCode());
}
logger.info("上传成功");
return uploadResults;
}
/**
* 下载文件
* @param groupName
* @param remoteFileName
* @return
*/
public static InputStream downFile(String groupName,String remoteFileName){
try {
StorageClient storageClient = getStorageClient();
byte[] fileByte = storageClient.download_file(groupName,remoteFileName);
InputStream ins = new ByteArrayInputStream(fileByte);
return ins;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 删除文件
* @param groupName
* @param remoteFileName
*/
public static void deleteFile(String groupName,String remoteFileName){
try {
StorageClient storageClient = getStorageClient();
int i = storageClient.delete_file(groupName, remoteFileName);
logger.info("删除成功");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查看文件信息
* @param groupName
* @param remoteFileName
* @return
*/
public static FileInfo getFile(String groupName,String remoteFileName){
try {
StorageClient storageClient = getStorageClient();
FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
return fileInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取文件路径
* @return
* @throws IOException
*/
public static String getTrackerUrl() throws IOException {
return "http://"+getTrackerServer().getInetSocketAddress().getHostName()+":8888";
}
}
之后就可以使用这个工具类去使用fastDFS了