FastDFS单机安装及Java API

FastDFS单机安装

准备Linux服务器或虚拟机。
Tracker和Storage安装在一台机器上。

版本

FastDFS 5.08版本

安装FastDFS依赖

FastDFS是C语言开发的应用。安装必须使用make、cmake和gcc编译器。

yum install -y make cmake gcc gcc-c++

上传文件后解压缩

将以下安装包上传至服务器/usr/local目录下(目录可以自己指定),之后解压libfastcommon-master.zip

必须要先安装依赖,再安装FastDFS主程序

图片中用到的安装包在文章最后分享了链接

unzip libfastcommon-master.zip -d /usr/local/fastdfs

编译安装

libfastmon没有提供make命令。使用的是shell脚本执行编译和安装。

shell脚本为make.sh

编译

./make.sh

安装

./make.sh install

有固定的默认安装位置。在/usr/lib64和/usr/include/fastcommon 两个目录中。

创建软连接

因为FastDFS主程序设置lib目录是/usr/local/lib,所以需要创建软连接

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.so

FastDFS主程序安装

上传并解压缩

tar -zxf libfastcommon-master.zip

解压后的目录如下:

编译安装

进入FastDFS目录:

./make.sh
./make.sh install

安装后,FastDFS主程序所在位置:

/usr/bin - 可执行文件所在位置。
/etc/fdfs - 配置文件所在位置。
/usr/lib64 - 主程序代码所在位置
/usr/include/fastdfs - 包含的一些插件组所在位置

服务配置

程序脚本

在/etc/init.d/目录中,脚本文件是fdfs-storagedfdfs-trackerd

配置文件

配置文件在/etc/fdfs/目录中:

  • tracker.conf.sample - 跟踪器服务配置文件模板
  • storage.conf.sample - 存储服务器配置文件模板
  • client.conf.sample - FastDFS提供的命令行客户端配置文件模板。可以通过命令行测试FastDFS有效性。

Tracker服务

修改配置文件

复制一份模板配置文件

cd /etc/fdfs
cp tracker.conf.sample tracker.conf

打开tracker.conf文件,修改base_path路径,base_path,FastDFSTracker启动后使用的根目录用来存放Tracker data和logs

base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-tracker #自定义的目录

配置中的路径需要先创建好才能启动服务:

mkdir -p /var/data/fastdfs-tracker

启动Tracker
/etc/init.d/fdfs_trackerd start

启动成功后,配置文件中base_path指向的目录中出现FastDFS服务相关数据目录(data目录、logs目录)。

查看服务状态
ps -ef | grep fdfs
停止服务
/etc/init.d/fdfs_trackerd stop
重启服务
/etc/init.d/fdfs_trackerd restart

启动Storage

配置文件
cd /etc/fdfs
cp storage.conf.sample storage.conf
mkdir -p /var/data/fastdfs-storage/base
mkdir -p /vae/data/fastdfs-storage/data
  • 指定base_path 基础路径。用于保存storage server基础数据内容和日志内容的目录。
base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-storage/base #自定义目录
  • store_path0 存储路径。用于保存FastDFS中存储文件的目录,就是要创建256*256个子目录的位置。base_path和store_path0可以使用同一个目录。
store_path0=/home/yuqing/fastdfs -> store_path0=/var/data/fastdfs-storage/data #自定义目录
  • tracker_server 跟踪服务器位置。就是跟踪服务器的ip和端口。
tracker_server=192.168.159.11:22122 -> tracker_server=tracker服务IP:22122 #这个ip看你的FastDFS装在哪,如果是单机,就写当前服务器ip

启动服务

要求tracker服务必须已启动

/etc/init.d/fdfs_storaged start

启动成功后,配置文件中base_path指向的目录中出现FastDFS服务相关数据目录(data目录、logs目录)
配置文件中的store_path0指向的目录中同样出现FastDFS存储相关数据目录(data)目录。
其中$store_path0/data/目录中默认创建若干子孙目录(两级目录层级总计256*256)个目录。

查看服务状态
/etc/init.d/fdfs_storaged status
停止服务
/etc/init.d/fdfs_storaged stop
重启服务
/etc/init.d/fdfs_storaged restart

Client

修改配置文件
cd /etc/fdfs
cp client.conf.sample client.conf

client.conf配置文件中主要描述客户端的行为,需要进行下述修改:

vi /etc/fdfs/client.conf
base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-client #自定义目录
tracker_server=192.168.150.11:22122 -> tracker_server=tracker服务IP:22122

base_path 就是客户端命令行执行过程时临时数据存储位置。
创建自定义目录:

mkdir -p /fastdfs/client

以上步骤配置完成之后,你的/etc/fdfs目录中应该有以下文件。(没有标注的文件没有,别着急,继续看)
#### 上传文件
以上配置完成以后,就可以上传文件了。(可以在服务器中随意选择一个文件)
命令如下:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf /root/initial-setup-ks.cfg

这里/root/initial-setup-ks.cfg是要上传的文件。

上传结束后,返回group1/M00/00/00/xxxxxxxx.xxx,检查storage服务节点中的$storage_path0/data/00/00/目录中是否有上传的文件(一般情况上传的文件按顺序保存在 …/data/00/00/目录中,也不能完全保证)。

  • 组名:group1文件上传后所在的storage组名称,在文件上传成功后由storage服务器返回,需要客户端自行保存。
  • 虚拟磁盘路径:M00storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  • 数据两级目录:/00/00storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  • 文件名:xxxx.xxx
删除文件
/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/xxxxx.xxx

Nginx组件

如果FastDFS中保存的是图片信息。希望在WEB应用中可以直接访问FastDFS中的图片进行显示。如何操作?

安装Nginx是为了WEB应用中可以使用HTTP协议直接访问Storage服务中存储的文件。在storage节点所在服务器安装Nginx组件。

需要安装两部分内容:

  • Nginx应用
  • 在安装Nginx时,同时要在Nginx中增加一个FastDFS的组件。

fastdfs-nginx-module模块

上传并解压

tar -zxf fastdfs-nginx-module_v1.16.tar.gz

进入到解压出来的目录,修改配置:(照着写就行)

vi /usr/local/fastdfs-nginx-module/src/config

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

编译安装Nginx

./configure --prefix=/usr/local/tengine
--add-module=/root/fastdfs-nginx-module/src/

make && make install

具体详细Nginx安装过程可以参考我的另一篇博客Nginx的安装和启动
但是注意,需要在Nginx编译安装时,加上--add-module=/root/fastdfs-nginx-module/src/

配置fastdfs-nginx-module

拷贝配置文件
cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改配置文件mod_fastdfs.conf
tracker_server=192.168.0.21:22122
url_have_group_name = true
store_path0=/var/data/fastdfs-storage/data

拷贝http服务需要的配置

复制FastDFS安装包中的两个配置文件(http.conf和mime.types)到/etc/fdfs目录中。

创建网络访问存储服务的软连接

在上传文件到FastDFS后,FastDFS会返回group1/M00/00/00/xxxxxx.xxx。其中group1是卷名,在mod_fastdfs.conf配置文件中已配置了url_have_group_name,以保证URL解析正确。

而其中的M00是FastDFS保存数据时使用的虚拟目录,需要将这个虚拟目录定位到真是数据目录上。

ln -s /var/data/fastdfs-storage/data/data/  /var/data/fastdfs-storage/data/data/M00
修改Nginx配置文件
location ~ /group([0-9])/M00 {
    ngx_fastdfs_module;
}

这样就可以通过http访问图片了

指定文件名

在Nginx配置的location中,添加:

add_header Content-Disposition "attachment;filename=$arg_attname";

Java API

https://github.com/tobato/FastDFS_Client
可以参照这个链接,是在FastDFS作者原始的API上做了重构,全程中文。

  • 需要在项目中引入依赖。(以上面的链接的文档为准)
<!--FastDFS-Client-->
<dependency>
	<groupId>com.github.tobato</groupId>
	<artifactId>fastdfs-client</artifactId>
	<version>1.26.6</version>
</dependency>
  • SpringBoot中配置,需要指定tracker的地址和端口号
fdfs:
  so-timeout: 1500
  connect-timeout: 600
  tracker-list:
  - 192.168.0.21:22122
  • 指定缩略图的配置
thumb-image:
    width: 150
    height: 150

上传文件

	// 元数据
	Set<MetaData> metaDataSet = new HashSet<MetaData>();
	//指定元数据
	metaDataSet.add(new MetaData("Author", "wangwren"));
	metaDataSet.add(new MetaData("CreateDate", "2019-07-21"));

	StorePath uploadFile = null;
	//上传文件
	//文件
	//文件大小
	//使用FilenameUtils.getExtension获取文件后缀,及元数据
	uploadFile = fc.uploadFile(filename.getInputStream(), filename.getSize(), FilenameUtils.getExtension(filename.getOriginalFilename()), metaDataSet);

	//上传后文件保存的路径,带group
	System.out.println(uploadFile.getFullPath());
  • 返回结果带group
uploadFile.getFullPath() : group1/M00/00/00/wKiWDV0u7ZKALKtNAAADP9sEx2w432.sql
  • 返回结果不带group
uploadFile.getPath() : M00/00/00/wKiWDV0u7ZKALKtNAAADP9sEx2w432.sql

上传成功后,就可以通过http://tracker服务IP/控制台打印出的路径,查看上传的图片。

下载文件

@RequestMapping("/down")
@ResponseBody
public ResponseEntity<byte[]> down(HttpServletResponse resp) {
	
	DownloadByteArray cb = new DownloadByteArray();
	HttpHeaders headers = new HttpHeaders();
	headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	//指定文件名
	headers.setContentDispositionFormData("attachment", "aaa.xx");
	//指定文件,正常是从数据库中取
	byte[] bs = fc.downloadFile("group1", "M00/00/00/wKiWDV0vAb-AcOaYABf1Yhcsfws9181.xx", cb);
	
return new ResponseEntity<>(bs,headers,HttpStatus.OK);
}

资源包

百度云链接
密码:hoog

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值