大家好,欢迎来到IT知识分享网。
Fdfs环境搭建及整合Java
一、fdfs依赖安装
安装gcc(编译时需要)
FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
yum install -y gcc gcc-c++
安装libevent(运行时需求)
若安装了桌面图形界面,就不需要安装;FastDFS依赖libevent库;
yum -y install libevent
运行时路径:!!!!!
在linux文件系统我们需要新建两个目录,一个目录为我们fdfs运行时的目录,一个是fdfs的数据文件存储目录:
运行时目录:/root/userdata/fdfsdata
数据目录:/root/userdata/fdfs_data
前置操作
为预防防火墙导致的问题,我们选择禁用防火墙的环境下进行环境搭建(centos7)
停止防火墙:
systemctl stop firewalld.service
禁止防火墙开机自启:
systemctl disable firewalld.service
二、安装tracker和storage
可以在fdfs官网下载fdfs的源文件:这里使用的是 fastdfs-5.05.tar.gz
解压:
tar -zxvf fastdfs-5.05.tar.gz
进入fdfs解压后的根目录有进行安装操作:
./make.sh
./make.sh install #编译之后接着进行安装
安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下:(xxxx为fdfs的conf目录)
cp xxxxx /etc/fdfs/
配置和启动tracker
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的tracker配置文件
cp tracker.conf.sample tracker.conf
(3)修改tracker.conf ; vim tracker.conf
base_path=/home/yuqing/fastdfs 改为: base_path=/root/userdata/fdfsdata
(4)启动tracker,运行如下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
注意:在/root/userdata/fdfsdata 目录下生成两个目录, 一个是数据,一个是日志;
配置和启动storage
由于上面已经安装过FastDFS,这里只需要配置storage就好了;
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的storage配置文件
cp storage.conf.sample storage.conf
(3)修改storage.conf ; vim storage.conf
base_path=/home/yuqing/fastdfs 改为: base_path=/root/userdata/fdfsdata
#store存放文件的位置(store_path)
store_path0=/home/yuqing/fastdfs 改为: store_path0=/root/userdata/fdfs_data
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
#配置tracker服务器:IP
tracker_server=host:22122
#如果有多个则配置多个tracker
#tracker_server=192.168.101.1:22122
#tracker_server=192.168.101.2:22122
#tracker_server=192.168.101.3:22122
#tracker_server=192.168.101.4:22122
(4)启动storage, 运行命令如下:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
启动完成后进入 /root/userdata/fdfs_data 目录下,显示目录如下:
使用FastDFS自带工具测试
(1)切换目录到 /etc/fdfs/ 目录下;
(2)拷贝一份新的client配置文件
cp client.conf.sample client.conf
(3)修改client.conf ; **vim client.conf,**修改基本路径和tracker_server如下:
base_path=/root/userdata/fdfsdata
tracker_server=host:22122
(5)进行测试,运行如下:(运行测试程序,读取/etc/fdfs/client.conf 文件,上传/root/userdata目录下的docker.jar文件)
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/userdata/docker.jar
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrbDms0U-1614058148548)(https://www.jiayou.art/fdfs/fdfs2.png)]
以上图中的文件地址:** http://192.168.43.34/group1/M00/00/00/wKgrImA0iimAOKGvAWF9mgaZZqY731_big.jar** 对应storage服务器上的/root/userdata/fdfs_data/data/00/00/wKgrImA0iimAOKGvAWF9mgaZZqY731_big.jar文件;
由于现在还没有和nginx整合无法使用http下载。
nginx文件映射
user root; #记住在用户指定为root用户 不然后期会出现权限问题等
server {
listen 8000; #nginx监听8000端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#匹配前置地址
#例如:http://192.168.43.34/group1/M00/00/00/wKgrImA0iimAOKGvAWF9mgaZZqY731_big.jar
#会匹配到/root/userdata/fdfs_data/data/00/00/wKgrImA0iimAOKGvAWF9mgaZZqY731_big.jar文件
location /group1/M00 {
alias /root/userdata/fdfs_data/data; #请求映射目录
autoindex off; #不列出文件目录 当然你可以设置为On来开启文件目录映射
autoindex_exact_size on;
autoindex_localtime on;
}
location / {
index index.html;
}
常用命令
测试上传文件:
fdfs_upload_file /etc/fdfs/client.conf /root/userdata/docker.jar
停止防火墙:
systemctl stop firewalld.service
禁止防火墙开机自启:
systemctl disable firewalld.service
启动Tracker 和 Storage
sudo service fdfs_trackerd start
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
sudo service fdfs_storaged start
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
测试连通性:
fdfs_monitor /etc/fdfs/storage.conf
naginx测试
http://192.168.43.34:8000/group1/M00/00/00/wKgrImAzwD6ATKFdAWF9mgaZZqY524_big.jar
三、整合Java
引入fdfs客户端依赖
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
配置连接信息
在maven的resources目录下新建配置fdfs连接的信息:fdfs_client.conf
connect_timeout = 30
network_timeout = 60
#fdfs的文件存储路径
base_path = /root/userdata/fdfs_data
#改为自己服务器的ip
tracker_server = 192.168.43.34:22122
log_level = info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker = false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port = 80
编写客户端程序
fun uploadFile() {
// 0、获取配置文件的绝对路径
val filePath: String = ClassPathResource("fdfs_client.conf").file.absolutePath
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init(filePath)
// 2、创建一个 TrackerClient 对象。直接 new 一个。
val trackerClient = TrackerClient()
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
val trackerServer = trackerClient.connection
// 4、创建一个 StorageServer 的引用,值为 null
val storageServer: StorageServer? = null
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
val storageClient = StorageClient(trackerServer, storageServer)
// 6、使用 StorageClient 对象上传图片。
//扩展名不带“.”
val strings = storageClient.upload_file("D:\\开题论证.docx", "docx",
arrayOf(NameValuePair("filename", "The talk sign.docx")))
// 7、返回数组。包含组名和图片的路径。
for (string in strings) {
println(string)
}
println("上传完成")
}
输出
group1 #文件组
M00/00/00/wKgrImA0j4qAXbiYAAWU3bYqu5A10.docx #fdfs文件表示路径
上传完成
测试使用nginx下载
根据返回的信息拼接http路径因该是这样子的:
http://虚拟机host:8000/group1/M00/00/00/wKgrImA0j4qAXbiYAAWU3bYqu5A10.docx
测试使用客户端下载
fun downloadFile() {
// 0、获取配置文件的绝对路径
val filePath: String = ClassPathResource("fdfs_client.conf").file.absolutePath
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init(filePath)
// 2、创建一个 TrackerClient 对象。直接 new 一个。
val trackerClient = TrackerClient()
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
val trackerServer = trackerClient.connection
// 4、创建一个 StorageServer 的引用,值为 null
val storageServer: StorageServer? = null
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
val storageClient = StorageClient(trackerServer, storageServer)
// 6、使用 StorageClient 对象上传图片。
val downloadFile = storageClient.download_file("group1", "M00/00/00/wKgrImA0j4qAXbiYAAWU3bYqu5A10.docx")
val out = FileOutputStream(File("C:\\Users\\shuang\\Desktop\\The talk sign.docx"))
out.write(downloadFile)
out.close()
println("下载完成")
}
这里是使用直接下载成字节数组来保存,当然你也可以使用其他方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cP0DBXEr-1614058148550)(https://www.jiayou.art/fdfs/fdfs3.png)]
获取文件信息
fun getFileInfo() {
val filePath: String = ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath()
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init(filePath)
// 2、创建一个 TrackerClient 对象。直接 new 一个。
val trackerClient = TrackerClient()
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
val trackerServer = trackerClient.connection
// 4、创建一个 StorageServer 的引用,值为 null
val storageServer: StorageServer? = null
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
val storageClient = StorageClient(trackerServer, storageServer)
val info = storageClient.get_file_info("group1", "M00/00/00/wKgrImA0j4qAXbiYAAWU3bYqu5A10.docx")
val mate = storageClient.get_metadata("group1", "M00/00/00/wKgrImA0j4qAXbiYAAWU3bYqu5A10.docx")
println(info)
mate.forEach {
println(it.name + "->" + it.value)
}
}
输出
source_ip_addr = 192.168.43.34, file_size = 365789, create_timestamp = 2021-02-23 13:15:54, crc32 = -1238713456
filename->The talk sign.docx
文档参考:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/10513.html