保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)(三)

简介: 保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)

  1. 查看结果

M00/00/00/rBOAlmH2mmqANl6tAAAADi991u4762.txt

cd /home/fastdfs/storage/files/data/00/00/


ab411155f8f343819adce9a608064c40.png

有big的表示备份的意思,-m表示文件的属性文件通常会记录文件的扩展名大小等基本信息。

cc97b06b48e04dacac3b0cafa5b50b45.png

  1. 通过浏览器访问


eac1f9c3a3644e15ae83b449fbab838f.png

下载文件

  1. 通过download命令指定组名文件位置进行下载
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBOAlmH2mmqANl6tAAAAD


d6b85b81525e47089f600f81191721de.png

ecb1fb3f13894d2695cd7e7c5a3fb55f.png

删除文件

/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBOAlmH2mmqANl6tAAAADi991u4762.txt


584e8468d43448e785fe67f702091cba.png

删除成功后我们进入storage/files/data目录进行查看发现除了备份文件与属性文件外源文件已经被成功删除了

4e5d5404169944afb4a76c601e539178.png

FastDFS-扩展模块执行流程


cd065db616de42df8716616741cdfe94.png

扩展模块解析了请求的文件路径以后,到指定的Tracker获取组名为group1的这个机器所在IP以及端口。

扩展模块获取了stroage所在IP以及端口后,就会自动使用Fastdfs的命令到指定的机器中获取文件流。


常用命令

  1. 启动FastDFS(每个人的路径可能不一样,找到自己的安装路径)

启动tracker:fdfs_trackerd /etc/fdfs/tracker.conf

启动storage: fdfs_storaged /etc/fdfs/storage.conf

  1. 关闭FastDFS

关闭tracker:/usr/local/bin/stop.sh fdfs_tracker

关闭storage: /usr/local/bin/stop.sh fdfs_storage

  1. 重启FastDFS

重启tracker: /usr/local/bin/restart.sh fdfs_trackered

重启storage: /usr/local/bin/restart.sh fdfs_storaged

  1. 查看集群情况 (%FastDFS%为自己的安装路径)

在任意一台storage(tracker也可以):/usr/local/bin/fdfs_monitor %FastDFS%/storage.conf

  1. 删除一个storage (%FastDFS%为自己的安装路径)

在任意一台storage(tracker也可以):/usr/local/bin/fdfs_monitor %FastDFS%/storage.conf delete group2 20.12.1.73

  1. 上传文件

fdfs_upload_file

  1. 下载文件

fdfs_download_file

  1. 查看文件信息

fdfs_file_info

  1. 删除文件

fdfs_delete_file

  1. 追加文件内容

fdfs_upload_appenderfdfs_append_file

  1. 监控服务器状态命令

fdfs_monitor


Java操作FastDFS

因为Maven依赖库中没有添加FastDFS相关依赖我们想要在java项目中引入FastDFS就需要在本地进行手动配置

准备工作

  1. 下载源码包并解压

地址:https://gitcode.net/mirrors/happyfish100/fastdfs-client-java?utm_source=csdn_github_accelerator

24b99669c21d446ab237f1e888e368be.png


1a629d09666c44c48a4ec15b81de2519.png

  1. 采用maven命令编译成jar安装到本地maven库

通过cmd打开黑窗口(注意文件夹位置)


2a75c80e6cbf48db9a1e965d143f4028.png

通过下方清空并安装命令它会进行自动打包(需要配置maven环境变量)

mvn clean install

83c371bcb7de475bae7613b56ad401c1.png

  1. 通过idea工具创建普通的maven工程

213d0303315a466f840fd0d15bfd00a3.png

  1. 添加依赖
        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.29-SNAPSHOT</version>
        </dependency>

2466564e4b9a436a9a5f84c1bf7c9db0.png


在resources目录下准备一个fastdfs.conf文件并编写相关配置

5e35c80d7d5445bbb8516342da53a44d.png

  1. 创建工具类测试上传,下载,删除等一系列操作

fc1ff76b9ee9436394ebbae91aa86f82.png


上传文件

  1. 编写代码
    /**
     * 文件上传
     */
    public static void upload(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件上传
             * 参数1:需要上传的文件的绝对路径
             * 参数2:需要上传的文件的扩展名
             * 参数3:文件的属性文件(通常不用上传)
             * 返回一个String数组,这个数据对我们非常重要必须妥善保管(建议存入数据库)
             * 数组中的一个元素为文件所在的组名
             * 数组中的第二个元素为文件所在远程路径名
             */
            String[] result= storageClient.upload_file("C:/Users/mzc/Desktop/剪辑素材/测试图片.jpg","jpg",null);
            for (String str:result){
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  1. 运行

5c607538786143ce85bd3ea5bb54d7c9.png

3. 测试(运行成功后会得到组名和路径名,通过ip地址/组名/远程路径名进行访问)


image.png


下载文件

  1. 编写下载文件代码
    /**
     * 下载文件
     */
    public static void download(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件下载
             * 参数1:需要下载的文件的组名
             * 参数2:需要下载文件的远程文件名
             * 参数3:需要保存的本地文件名
             * 返回一个int类型的数据,返回0表示文件下载成功,其他值表示文件下载失败
             */
            String groupName="group1";
            String remoteFileName="M00/00/00/rBOAlmIN4bCAKz-VAADA9OtiDMc665.jpg";
            String localFileName="E:/aa.jpg";
            int result= storageClient.download_file(groupName,remoteFileName,localFileName);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  1. 运行程序

267c21fcdced4c1dabf02b83342d797b.png



  1. 测试

4be20ffbc5674be6841660e3ea2e1231.png

21baad0de5f94903a5b1b28f2922cd3b.png

删除文件

  1. 编写代码
    /**
     * 删除文件
     */
    public static void delete(){
        try {
            //读取fastDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            System.out.println("初始化信息:"+ClientGlobal.configInfo());
            // 链接FastDFS服务器,创建tracker和Stroage
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer=trackerClient.getStoreStorage(trackerServer);
            //定义Stroage客户端对象,需要使用这个对象来完成具体的文件上传,下载和删除操作
            StorageClient storageClient=new StorageClient(trackerServer,storageServer);
            /**
             * 文件删除
             * 参数1:需要下载的文件的组名
             * 参数2:需要下载文件的远程文件名
             * 返回一个int类型的数据,返回0表示文件删除成功,其他值表示文件删除失败
             */
            String groupName="group1";
            String remoteFileName="M00/00/00/rBOAlmIN4bCAKz-VAADA9OtiDMc665.jpg";
            int result= storageClient.delete_file(groupName,remoteFileName);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


  1. 运行程序

f1ccca482d6746f5ac4355ffabf051c5.png

  1. 测试

adeee01d7ba646b3b0d31a1e84be207c.png


相关文章
|
2月前
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
45 0
|
1月前
|
存储 监控 容灾
TiDB存储层深入:分布式存储架构与数据一致性保障
【2月更文挑战第26天】本文将深入探讨TiDB的存储层,详细解析其分布式存储架构、数据复制机制以及数据一致性保障措施。通过了解存储层的核心组件和工作原理,我们可以更好地理解TiDB如何确保数据的可靠性、高可用性和可扩展性。本文将从存储层的架构、数据分布、容错机制等方面展开介绍,帮助读者全面掌握TiDB存储层的关键技术和优势。
|
1月前
|
算法 数据处理 异构计算
CatBoost高级教程:分布式训练与大规模数据处理
CatBoost高级教程:分布式训练与大规模数据处理【2月更文挑战第15天】
244 14
|
2月前
|
存储 缓存 固态存储
云计算基础-存储虚拟化(深信服aSAN分布式存储)
每秒钟的IOPS数,该指标主要用于评价小块IO性能,体现存储系统的IO延时能力和并发能力。业界一般默认IOPS指的是4K块大小的IO性能,该值越大说明性能越好。
56 1
|
2月前
|
机器学习/深度学习 分布式计算 Python
OpenAI Gym 高级教程——分布式训练与并行化
OpenAI Gym 高级教程——分布式训练与并行化
198 1
|
3月前
|
存储 NoSQL 算法
redis存储什么类型的数据?redis分布式锁怎么实现的?
redis存储什么类型的数据?redis分布式锁怎么实现的?
|
Java 数据库连接 mybatis
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)(下)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
37 0
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)(上)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
34 0
|
3月前
|
数据库 OceanBase
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求【1月更文挑战第12天】【1月更文挑战第56篇】
29 2
|
4月前
|
编译器 定位技术 开发工具
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法

热门文章

最新文章