FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相册网站、视频网站等。
(1):单机时代
初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源。
如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分。如resources\static\file、resources\static\img等
# 优点:这样做比较便利,项目直接引用就行,实现起来也简单,无需任何复杂技术,保存数据库记录和访问起来也很方便。
# 缺点:如果只是后台系统的使用一般也不会有什么问题,但是作为一个前端网站使用的话就会存在弊端。一方面,文件和代码耦合
在一起,文件越多存放越混乱;另一方面,如果流量比较大,静态文件访问会占据一定的资源,影响正常业务进行,不利于网站
快速发展。
(2):独立文件服务器
随着公司业务不断发展,将代码和文件放在同一服务器的弊端就会越来越明显。为了解决上面的问题引入独立图片服务器,工作
流程如下:项目上传文件时,首先通过ftp或者ssh将文件上传到图片服务器的某个目录下,再通过ngnix或者apache来访问此
目录下的文件,返回一个独立域名的图片URL地址,前端使用文件时就通过这个URL地址读取。
# 优点:图片访问是很消耗服务器资源的(因为会涉及到操作系统的上下文切换和磁盘I/O操作),分离出来后,Web/App服务器
可以更专注发挥动态处理的能力;独立存储,更方便做扩容、容灾和数据迁移;方便做图片访问请求的负载均衡,方便应用各
种缓存策略(HTTP Header、Proxy Cache等),也更加方便迁移到CDN。
# 缺点:单机存在性能瓶颈,容灾、垂直扩展性稍差
(3):分布式文件系统
通过独立文件服务器可以解决一些问题,如果某天存储文件的那台服务突然down了怎么办?可能你会说,定时将文件系统备份,
这台down机的时候,迅速切换到另一台就OK了,但是这样处理需要人工来干预。另外,当存储的文件超过100T的时候怎么办?
单台服务器的性能问题?这个时候我们就应该考虑分布式文件系统了。业务继续发展,单台服务器存储和响应也很快到达了瓶颈,
新的业务需要文件访问具有高响应性、高可用性来支持系统。分布式文件系统,一般分为三块内容来配合,服务的存储、访问的
仲裁系统,文件存储系统,文件的容灾系统来构成,仲裁系统相当于文件服务器的大脑,根据一定的算法来决定文件存储的位置,
文件存储系统负责保存文件,容灾系统负责文件系统和自己的相互备份。
# 优点:扩展能力: 毫无疑问,扩展能力是一个分布式文件系统最重要的特点;高可用性: 在分布式文件系统中,高可用性包含两
层,一是整个文件系统的可用性,二是数据的完整和一致性;弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删
存储池中的资源,而不需要中断系统运行
# 缺点:系统复杂度稍高,需要更多服务器
为什么使用分布式文件系统?
FastDFS由跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)构成。
(1)跟踪服务器Tracker Server
主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。tracker根据storage的心跳信息,建立group==>[storage serverlist]的映射表。
Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
(2)存储服务器Storage Server
主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。
group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。storage接受到写文件请求时,会根据配置好的规则选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据作为本地文件存储到该目录中。
(3)客户端Client
主要是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。每个客户端服务器都需要安装Nginx
Tracker相当于FastDFS的大脑,不论是上传还是下载都是通过tracker来分配资源;客户端一般可以使用ngnix等静态服务器来调用或者做一部分的缓存;存储服务器内部分为卷(或者叫做组),卷于卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。
(4)FastDFS的存储策略
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
(5)FastDFS的上传过程
FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。
我们知道Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。
当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。文件名的格式如下:
(6)FastDFS的文件同步
写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。
每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。
storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。
(7)FastDFS的文件下载
客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。
跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。
(1):系统准备
①:刚重置的腾讯云 CentOS 7.6 系统
(2):文件准备
①:libfastcommon:是FastDFS文件系统运行需要的公共 C 语言函数库
②:FastDFS:主体文件需要安装部署在Linux环境下
③:fastdfs-client-java : java客户端基本代码(需maven手动编译)
④:fastdfs-nginx-module :扩展模块,集成Nginx里实现负载均衡等功能
⑤:Nginx :实现负载均衡及文件的访问是用到
(3):上传准备的文件,出fastdfs-client-java 其它全部上传
切换到根目录下上传 个人喜好 cd /root
执行上传命令:rz -y
(1):环境检查是否有 gcc 、libevent 、libevent-devel
检查命令: yum list installed | grep gcc yum list installed | grep libevent yum list installed | grep libevent-devel 安装命令,如果有新版则更新 yum install gcc libevent libevent-devel -y
libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库;注意:v1.0.39和FastDFS5.11不兼容
**>>解压
tar -zxvf libfastcommon-1.0.48.tar.gz
进入解压后的目录
cd libfastcommon-1.0.48/
编译解压的文件 这里需要gcc环境
./make.sh
安装编译后的文件
./make.sh install
完成**
FastDFS没有Windows版本,不能在Windows下使用。FastDFS需要安装部署在Linux环境下
**>>解压
tar -zxvf fastdfs-6.07.tar.gz
进入解压后的目录
cd fastdfs-6.07/
编译解压的文件 和 安装编译的文件
./make.sh && ./make.sh install
>>检查是否安装了 (安装后命令会存在/usr/bin)
ls /usr/bin | grep fdfs
**
(1):查看 FastDFS 配置文件
安装FastDFS后配置文件存放在 /etc/fdfs 下;注:另外注意需要把之前解压的fastdfs-6.0.7/conf目录下的两个文件拷贝到安装后产生的/etc/fdfs/目录下 ,否则后续会有很多奇怪问题不好解决 http.conf 和 mime.types
cp /root/fastdfs-6.07/conf/http.conf /etc/fdfs
cp /root/fastdfs-6.07/conf/mime.types /etc/fdfs
因为这些文件后缀都是 .sample 示例的,所有我们把 .sample后缀都去除
mv /etc/fdfs/client.conf.sample client.conf mv /etc/fdfs/tracker.conf.sample tracker.conf mv /etc/fdfs/storage.conf.sample storage.conf mv /etc/fdfs/storage_ids.conf.sample storage_ids.conf
要想运行我们的FastDFS服务,我们得配置我们必要的信息,启动tracker服务则需要配置tracker.conf,启动storage服务也需要配置对应文件
(1):负载均衡 tracker.conf 配置文件的配置修改
如果不方便使用vim更改的话,可以使用 rz -y 上传 和 sz file名称 下载 到本地编辑
配置 tracker 存储数据的目录(自定义配置后期tracker产生的数据和日志保存的地方)
配置:base_path = /opt/fastdfs/tracker 注:设置的路径我们必须要手动创建
# 配置tracker.conf 文件是否生效 false生效 true屏蔽
disabled = false
bind_addr =
port = 22122
connect_timeout = 5
network_timeout = 60
base_path = /home/yuqing/fastdfs
max_connections = 1024
accept_threads = 1
work_threads = 4
min_buff_size = 8KB
max_buff_size = 128KB
store_lookup = 2
store_group = group2
store_server = 0
store_path = 0
download_server = 0
reserved_storage_space = 20%
log_level = info
run_by_group=
run_by_user =
allow_hosts = *
sync_log_buff_interval = 1
check_active_interval = 120
thread_stack_size = 256KB
storage_ip_changed_auto_adjust = true
storage_sync_file_max_delay = 86400
storage_sync_file_max_time = 300
use_trunk_file = false
slot_min_size = 256
slot_max_size = 1MB
trunk_alloc_alignment_size = 256
trunk_free_space_merge = true
delete_unused_trunk_files = false
trunk_file_size = 64MB
trunk_create_file_advance = false
trunk_create_file_time_base = 02:00
trunk_create_file_interval = 86400
trunk_create_file_space_threshold = 20G
trunk_init_check_occupying = false
trunk_init_reload_from_binlog = false
trunk_compress_binlog_min_interval = 86400
trunk_compress_binlog_interval = 86400
trunk_compress_binlog_time_base = 03:00
trunk_binlog_max_backups = 7
use_storage_id = false
storage_ids_filename = storage_ids.conf
id_type_in_filename = id
store_slave_file_use_link = false
rotate_error_log = false
error_log_rotate_time = 00:00
compress_old_error_log = false
compress_error_log_days_before = 7
rotate_error_log_size = 0
log_file_keep_days = 0
use_connection_pool = true
connection_pool_max_idle_time = 3600
http.server_port = 8080
http.check_alive_interval = 30
http.check_alive_type = tcp
http.check_alive_uri = /status.html
tracker.conf 配置详细介绍
(2):文件存储服务器 storage.conf 配置文件的配置修改
配置 storage.conf 是指定后期运行产生的数据和真实的文件存储位置,注设置的路径我们必须手动创建
配置storage存储数据的目录:base_path = /opt/fastdfs/storage 配置真正存放文件的目录: store_path0=/opt/fastdfs/storage/files 配置当前存储节点的跟踪器地址(就是tracker):tracker_server=119.29.68.209:22122
# 配置storage.conf 文件是否生效 false生效 true屏蔽
disabled = false
group_name = group1
bind_addr =
client_bind = true
port = 23000
connect_timeout = 5
network_timeout = 60
heart_beat_interval = 30
stat_report_interval = 60
base_path = /home/yuqing/fastdfs
max_connections = 1024
buff_size = 256KB
accept_threads = 1
work_threads = 4
disk_rw_separated = true
disk_reader_threads = 1
disk_writer_threads = 1
sync_wait_msec = 50
sync_interval = 0
sync_start_time = 00:00
sync_end_time = 23:59
write_mark_file_freq = 500
disk_recovery_threads = 3
store_path_count = 1
store_path0 = /home/yuqing/fastdfs
#store_path1 = /home/yuqing/fastdfs2
subdir_count_per_path = 256
tracker_server = 192.168.209.121:22122
tracker_server = 192.168.209.122:22122
log_level = info
run_by_group =
run_by_user =
allow_hosts = *
#(参数file_distribute_rotate_count中设置文件数),使用下一个目录进行存储。
file_distribute_path_mode = 0
file_distribute_rotate_count = 100
fsync_after_written_bytes = 0
sync_log_buff_interval = 1
sync_binlog_buff_interval = 1
sync_stat_file_interval = 300
thread_stack_size = 512KB
upload_priority = 10
if_alias_prefix =
check_file_duplicate = 0
file_signature_method = hash
#当check_file_duplicate设置为1时,此值必须设置
key_namespace = FastDFS
keep_alive = 0
use_access_log = false
rotate_access_log = false
access_log_rotate_time = 00:00
compress_old_access_log = false
compress_access_log_days_before = 7
rotate_error_log = false
error_log_rotate_time = 00:00
compress_old_error_log = false
compress_error_log_days_before = 7
rotate_access_log_size = 0
rotate_error_log_size = 0
log_file_keep_days = 0
file_sync_skip_invalid_record = false
use_connection_pool = true
connection_pool_max_idle_time = 3600
compress_binlog = true
compress_binlog_time = 01:30
check_store_path_mark = true
http.domain_name =
http.server_port = 8888
storage.conf 配置详细介绍
(3):创建我们之前在配置里指定的一些路径
必须创建,否则无法启动 mkdir -p /opt/fastdfs/tracker mkdir -p /opt/fastdfs/storage mkdir -p /opt/fastdfs/storage/files
我们修改好配置后,并且在配置文件配置的文件路径也被我们手动创建后就可以来启动服务了
**# 启动 Tracker 追踪器服务
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs\_storaged /etc/fdfs/storage.conf
fdfs\_trackerd /etc/fdfs/tracker.conf restart
fdfs\_storaged /etc/fdfs/storage.conf restart
fdfs\_trackerd /etc/fdfs/tracker.conf stop
fdfs\_storaged /etc/fdfs/storage.conf stop**
(1):查询tracker文件下是否被自动创建了data 和 log 文件
命令:ls /opt/fastdfs/tracker/
(2):查询storage文件下是否自动创建了data 和 log 和files具体文件路径
我们完成了上面的配置后并且也可以运行服务后,我们就可以来测试我们的FastDFS是否存在问题了,在测试前我们需要配置一个 /etc/fdfs/client.conf 的文件
配置client存储数据的目录:base_path = /opt/fastdfs/client 注:别忘了把文件夹创建出来 配置当前存储节点的跟踪器地址(就是tracker):tracker_server=119.29.68.209:22122
# 连接的超时时间
connect_timeout = 5
network_timeout = 60
base_path = /home/yuqing/fastdfs
tracker_server = 192.168.0.196:22122
tracker_server = 192.168.0.197: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
client.conf 配置具体说明
我们要使用测试则需要使用到 fdfs_test 命令来完成测试
命令:fdfs_test /etc/fdfs/client.conf upload 上传的文件名称
查询文件 这里存储到../00/00里
测试删除
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/dx1E0WArYHCALYE2AAAADEQKaqU633_big.txt
在文件上传的时候,上传成功的信息中有提示我们可以通过某个路径去访问上传的文件,但是我们直接访问这个路径,却不可以,那么已经上传到FastDFS文件系统中的文件,我们如何在浏览器中访问呢?FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件
**安装Nginx环境检查:
gcc编译器是否安装
检查是否安装:yum list installed | grep gcc
执行安装:yum install gcc -y
openssl库是否安装
检查是否安装:yum list installed | grep openssl
执行安装:yum install openssl openssl-devel -y
pcre库是否安装
检查是否安装:yum list installed | grep pcre
执行安装:yum install pcre pcre-devel -y
zlib库是否安装
检查是否安装:yum list installed | grep zlib
执行安装:yum install zlib zlib-devel -y
全安装:
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel –y
解压:fastdfs-nginx-module-1.22.tar.gz
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
解压:nginx-1.19.6.tar.gz
tar -zxvf nginx-1.19.6.tar.gz
进入:nginx-1.19.6
cd nginx-1.19.6/
安装前配置
./configure --prefix=/usr/local/nginx_fdfs --add-module=/root/fastdfs-nginx-module-1.22/src
--prefix:指定准备安装到哪 --add-module:指定集成的fdfs模块
编译 && 安装
make && make install**
(1):拷贝模块文件到 /etc/fdfs
我们需要先把扩展模块 fastdfs-nginx-module-master/src 里的 mod_fastdfs.conf 文件拷贝到 /etc/fdfs/ 目录下,这样才可以正常启动Nginx
命令:cp /root/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs
(2):修改拷贝过来的 /etc/fdfs/mod_fastdfs.conf 文件
**# 配置存储运行产生的日志数据等等 文件路径必须存在
base_path=/opt/fastdfs/nginx_mod
tracker\_server=119.29.68.209:22122
url\_have\_group\_name = true
store\_path0=/opt/fastdfs/storage/files**
# 连接超时时间(秒)。
connect_timeout=2
network_timeout=30
base_path=/tmp
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf
tracker_server=tracker:22122
storage_server_port=23000
group_name=group1
url_have_group_name = false
store_path_count=1
store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs1
log_level=info
log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 0
[group1]
group_name=group1
storage_server_port=23000
store_path_count=2
store_path0=/home/yuqing/fastdfs
store_path1=/home/yuqing/fastdfs1
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/yuqing/fastdfs
mod_fastdfs.conf 配置具体说明
(3):修改Nginx配置文件
完成上面,我们就得开始配置我们的Nginx配置了,这个配置按照之前的安装是在 /usr/local/nginx_fdfs/conf/nginx.conf
命令:vim /usr/local/nginx_fdfs/conf/nginx.conf
#拦截请求路径中包含 /group[1-9]/M[0-9][0-9] 的请求,用 fastdfs的Nginx 模块进行转发
location ~ /group[1-9]/M[0-9][0-9] {
ngx_fastdfs_module;
} #注:ngx_fastdfs_module:这个指令不是Nginx本身提供的,是扩展模块提供的,根据这个指令找
(4):运行Nginx服务
切换到Nginx sbin目录下:cd /usr/local/nginx_fdfs/sbin/
执行nginx目录:./nginx
查询是否启动:ps -ef | grep nginx
(5):测试,上传一个文件并在本地浏览器访问
我们随便上传一个文件后,上传成功后会给我们返回一个带http的具体链接,我们直接在本地浏览器就可以访问(开启80端口)
# 上传文件测试
fdfs_test /etc/fdfs/client.conf upload abc.txt # 返回获取的http地址准备本地访问
** http://119.29.68.209/group1/M00/00/00/dx1E0WArksiARSeLAAAADEQKaqU125.txt**
在真实开发中我们肯定不会使用如 fdfs_test 命令来上传文件,通常使用java代码来编写指定的上传代码,但是我们想使用得要一个jar包,就是我们最初下载的 fastdfs-client-java-1.28.tar.gz ,由于是源码,我们使用 maven 的 mvn 命令编译一下即可
安装过后就会出现到你的maven仓库了..\org\csource\fastdfs-client-java
我们以创建一个简单的maven项目为例
pom.xml坐标
完成了 pom.xml 文件的编写,我们就去resource下创建一个 fastdfs.conf 的配置文件指定 tracker地址
tracker_server = 119.29.68.209:22122
public class Test {
public static void main(String[] args) {
//上传
//upload();
//下载
//download();
//删除
delete();
}
//上传方法
//注意22122 23000端口的开放
public static void upload() {
try {
//加载配置文件
ClientGlobal.init("fastdfs.conf");
//创建 TrackerClient跟踪器客户端
TrackerClient trackerClient = new TrackerClient();
//通过 TrackerClient跟踪器客户端 获取 TrackerServer跟踪器服务端
TrackerServer trackerServer = trackerClient.getTrackerServer();
//通过 TrackerClient跟踪器客户端 获取 StorageServer存储服务器服务端
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
//创建存储服务器客户端
StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
//开始上传
// 第一个参数文件路径,也可以是二进制数组
// 第二个参数是文件类型
String[] strings = storageClient.upload_file("h:\\1.jpg", "jpg", null);
for (String str : strings) {
System.out.println(str);
//打印:
// group1
// M00/00/00/dx1E0WArsfeAWVTvAAEoDtcZimw368.jpg
}
//关闭资源
storageClient.close();
} catch (IOException | MyException e) {
e.printStackTrace();
}
}
//下载
public static void download() {
try {
//加载配置文件
ClientGlobal.init("fastdfs.conf");
//创建 TrackerClient跟踪器客户端
TrackerClient trackerClient = new TrackerClient();
//通过 TrackerClient跟踪器客户端 获取 TrackerServer跟踪器服务端
TrackerServer trackerServer = trackerClient.getTrackerServer();
//通过 TrackerClient跟踪器客户端 获取 StorageServer存储服务器服务端
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
//创建存储服务器客户端
StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
//开始下载
byte\[\] bytes = storageClient.download\_file("group1", "M00/00/00/dx1E0WArsfeAWVTvAAEoDtcZimw368.jpg");
//写出文件
new FileOutputStream("H:\\\\downloadfile.jpg").write(bytes);
//关闭资源
storageClient.close();
} catch (IOException | MyException e) {
e.printStackTrace();
}
}
//删除
public static void delete() {
try {
//加载配置文件
ClientGlobal.init("fastdfs.conf");
//创建 TrackerClient跟踪器客户端
TrackerClient trackerClient = new TrackerClient();
//通过 TrackerClient跟踪器客户端 获取 TrackerServer跟踪器服务端
TrackerServer trackerServer = trackerClient.getTrackerServer();
//通过 TrackerClient跟踪器客户端 获取 StorageServer存储服务器服务端
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
//创建存储服务器客户端
StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
//开始删除
int result = storageClient.delete\_file("group1", "M00/00/00/dx1E0WArsfeAWVTvAAEoDtcZimw368.jpg");
System.out.println(result == 0 ? "删除成功" : "删除失败"); //0成功,返回其它数字都是失败
//关闭资源
storageClient.close();
} catch (IOException | MyException e) {
e.printStackTrace();
}
}
}
上传、下载、删除具体代码,没有封装
.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章