原理及下载
什么是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 = 5fastdfs.network_timeout_in_seconds = 30fastdfs.charset = UTF-8fastdfs.http_anti_steal_token = falsefastdfs.http_secret_key = FastDFS1234567890fastdfs.http_tracker_http_port = 80fastdfs.tracker_servers =tracker服务的地址:221223.编写测试类
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的简略总结了,心愿能帮忙到大家