共计 5045 个字符,预计需要花费 13 分钟才能阅读完成。
原理及下载
什么是 fastDFS
fastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统,他对文件进行治理,次要性能有:文件存储,文件同步,文件拜访(文件上传 / 下载), 特地适宜以文件为载体的在线服务,如图片网站,视频网站等
什么是文件系统
借用百度百科形容
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于 NAND Flash 的固态硬盘)或分区上的文件的办法和数据结构;即在存储设备上组织文件的办法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三局部组成:文件系统的接口,对对象操纵和治理的软件汇合,对象及属性。从零碎角度来看,文件系统是对文件存储设备的空间进行组织和调配,负责文件存储并对存入的文件进行爱护和检索的零碎。具体地说,它负责为用户建设文件,存入、读出、批改、转储文件,管制文件的存取,当用户不再应用时撤销文件等
也就是说文件系统在计算机中的作用是操作系统与硬盘之间的桥梁,他通过驱动来实现文件的存储,文件系统也是属于操作系统的一部分
什么是分布式文件系统
借用百度百科形容
分布式文件系统(Distributed File System,DFS)是指文件系统治理的物理存储资源不肯定间接连贯在本地节点上,而是通过计算机网络与节点(可简略的了解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而造成的残缺的有档次的文件系统。DFS 为散布在网络上任意地位的资源提供一个逻辑上的树形文件系统构造,从而使用户拜访散布在网络上的共享文件更加简便。独自的 DFS 共享文件夹的作用是绝对于通过网络上的其余共享文件夹的拜访点
基于客户端 / 服务器的文件存储系统
对等个性容许一些零碎表演客户端和服务器的双重角色,可供多个用户拜访的服务器,比方,用户能够“发表”一个容许其余客户机拜访的目录,一旦被拜访,这个目录对客户机来说就像应用本地驱动器一样
通过下面咱们简略理解了什么是 fastDFS 以及分布式文件系统的概念
上面来看下他的运行原理
FastDFS 服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器次要做调度工作,在拜访上起负载平衡的作用。存储节点存储文件,实现文件治理的所有性能:存储、同步和提供存取接口,FastDFS 同时对文件的 meta data 进行治理。所谓文件的 meta data 就是文件的相干属性,以键值对(key value pair)形式示意,如:width=1024,其中的 key 为 width,value 为 1024。文件 meta data 是文件属性列表,能够蕴含多个键值对。
FastDFS 系统结构如下图所示:
文件上传
文件下载
fastDFS 的装置步骤 切记要把端口号关上
须要应用他 (fastdfs-client-java) 来进行与 springboot 整合
以下的代码时依据 fastdfs-client-java 提供的示例代码批改的
代码局部
1. 新建一个 sringboot 我的项目在 pom.xml 中引入依赖
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.29-SNAPSHOT</version>
</dependency>
2. 在 resources 文件夹下创立一个 fdfs 文件夹,在外面创立一个 fastdfs-client.properties
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890
fastdfs.http_tracker_http_port = 80
fastdfs.tracker_servers =tracker 服务的地址:22122
3. 编写测试类
3.1 测试上传
@Test
void testUpload(){
try {
// 加载 fastDFS 的配置文件 因为这里应用的是 Properties 格局的文件 所以应用 initByProperties
ClientGlobal.initByProperties("fdfs/fastdfs-client.properties");
System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
System.out.println("charset=" + ClientGlobal.g_charset);
// 创立 TrackerClient
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
// 创立 StorageServer
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
// 文件上传的元信息
NameValuePair[] metaList = new NameValuePair[1];
// 这里第一个参数随便写,第二个参数是上传文件是命名的文件名
metaList[0] = new NameValuePair("fileName", "1.png");
// 第一个参数是本地文件的地址,第一个是文件的后缀名,第三个是元信息
String fileId = client.upload_file1("F:\\code\\1.png", null, metaList);
System.out.println("upload success. file id is:" + fileId);
} catch (Exception ex) {ex.printStackTrace();
}
}
上传胜利后的样子
标记的局部肯定记好了,上面要用到
3.2 测试查看文件
@Test
void testQuery(){
try {
// 加载 fastDFS 的配置文件
ClientGlobal.initByProperties("fdfs/fastdfs-client.properties");
System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
System.out.println("charset=" + ClientGlobal.g_charset);
// 创立 TrackerClient
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
// 创立 StorageServer
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
// 执行查问
// 两行代码是一样的
//FileInfo fileInfo = client.query_file_info("group1", "M00/00/00/rBGDpV_xZuiAAbtJAAKWrzhZhWU376.png");
FileInfo fileInfo = client.query_file_info1("group1/M00/00/00/rBGDpV_xZuiAAbtJAAKWrzhZhWU376.png");
// 查问元信息
NameValuePair[] metadata1 = client.get_metadata1("group1/M00/00/00/rBGDpV_xZuiAAbtJAAKWrzhZhWU376.png");
//NameValuePair[] metadata2 = client.get_metadata("group1","M00/00/00/rBGDpV_xZuiAAbtJAAKWrzhZhWU376.png");
System.out.println(fileInfo);
System.out.println("元信息 -----");
System.out.println(metadata1);
} catch (Exception ex) {ex.printStackTrace();
}
}
查看文件胜利后
文件信息展现进去了
3.3 下载文件
@Test
void testDownload(){
try {
// 加载 fastDFS 的配置文件
ClientGlobal.initByProperties("fdfs/fastdfs-client.properties");
System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
System.out.println("charset=" + ClientGlobal.g_charset);
// 创立 TrackerClient
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
// 创立 StorageServer
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
// 文件下载
byte[] bytes = client.download_file1("group1/M00/00/00/rBGDpV_xhtOAGem-AAKWrzhZhWU356.png");
// 将文件写出
File file = new File("f:/abd.png");
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(bytes);
} catch (Exception ex) {ex.printStackTrace();
}
}
下载胜利后
在指定盘符下会找打此文件
3.4 删除文件
@Test
void testDelete(){
try {
// 加载 fastDFS 的配置文件
ClientGlobal.initByProperties("fdfs/fastdfs-client.properties");
System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
System.out.println("charset=" + ClientGlobal.g_charset);
// 创立 TrackerClient
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
// 创立 StorageServer
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
// 文件删除
int i = client.delete_file1("group1/M00/00/00/rBGDpV_xhtOAGem-AAKWrzhZhWU356.png");
if(i>=0){System.out.println("删除胜利!");
}
} catch (Exception ex) {ex.printStackTrace();
}
}
删除胜利后
在执行一下查问 发现变成了 null
以上就是 spring+fastDFS 的简略总结了,心愿能帮忙到大家
欢送大家关注我的公众号,会分享一些本人的学习过程
正文完