图片服务器fastdfs使用_bigLiu66的博客-程序员宝宝

技术标签: FastDFS  

目录

一:什么是FastDFS?

二: FastDFS架构 

三:文件上传流程 

四:文件下载流程

五:FastDFS的使用

5.1上传图片步骤

5.2使用工具类上传文件


 

一:什么是FastDFS?

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 

二: FastDFS架构 

FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

                                   

服务端两个角色:

Tracker:管理集群,tracker也可以实现集群。每个tracker节点地位平等。

收集Storage集群的状态。

Storage:实际保存文件

Storage分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。 

三:文件上传流程 

 客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

                    

  1. 组名:(group1)文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
  2. 虚拟磁盘路径:(M00)storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  3. 数据两级目录:(00/00)storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  4. 文件名:(wKgZhVxFJWuAfW4zAAAYiCFjXzM969.jpg)与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

四:文件下载流程

五:FastDFS的使用

maven工程的话,直接在pom文件中引入依赖就可以,否则就需要引入jar包。

5.1上传图片步骤

@Test
	public void test() throws Exception{
		//创建一个配置文件,文件名任意,内容是tracker服务器的地址	
		ClientGlobal.init("D:/mars.2_workspace - e3Mall/e3-manager-web/src/main/resources/conf/client.conf");
		//创建一个trackerClient对象
		TrackerClient trackerClient = new TrackerClient();
		//使用TrackerClient对象创建连接,获得一个TrackerServer对象
		TrackerServer trackerServer = trackerClient.getConnection();
		//创建一个StorageServer的引用,值为null
		StorageServer storageServer = null;
		//创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用
		StorageClient storageClient = new StorageClient(trackerServer, storageServer);
		//使用StorageClient对象上传图片。
		String[] strings = storageClient.upload_file("C:/Users/liuxiang/Pictures/Saved Pictures/kid.jpg", "jpg", null);
		//返回数组。包含组名和图片的路径。
		for(String string : strings){
			System.out.println(string);
		}
	}

返回结果:

我们在浏览器中输入地址可以直接访问到

5.2使用工具类上传文件

@Test
	public void testFastDfsClient() throws Exception{
		FastDFSClient fastDFSClient = new FastDFSClient("D:/mars.2_workspace - e3Mall/e3-manager-web/src/main/resources/conf/client.conf");		
		String string = fastDFSClient.uploadFile("C:/Users/liuxiang/Pictures/Saved Pictures/cbe2c59643e1a5bc!400x400_big.jpg");
		System.out.println(string);
	}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bigLiu66/article/details/86568959

智能推荐

淘宝在数据处理领域的项目及开源产品介绍_weixin_30739595的博客-程序员宝宝

淘宝在数据存储和处理领域在国内互联网公司中一直保持比较靠前的位置,而且由于电子商务领域独特的应用场景,淘宝在数据实时性和大规模计算及挖掘方面一直在国内保持着领先,因此积累了很多的实践的经验和产品。TimeTunnel基于Hbase打造的消息中间件,具有高可靠、消息顺序、事务等传统特性,还能按时间维度反复订阅最近历史的任意数据高性能的broker,单节点达2万TPS,实际支持上千长链...

android怎么自动获取权限不弹窗,android-su-without-dialog_weixin_39752352的博客-程序员宝宝

举例:runasroot的用法,首先到download runasroot下载,需要经过赋予权限,root用户组所有,可执行,拷贝到/system/bin,再切换到普通用户,然后就万事大吉,可以在普通shell里面执行需要root权限才能执行的命令$adb push runasroot /data/local/tmp/$adb [email protected]:/data/local/tmp ...

6-3 Add Two Polynomials(20 分)_四月~的博客-程序员宝宝

6-3 Add Two Polynomials(20 分)Write a function to add two polynomials. Do not destroy the input. Use a linked list implementation with a dummy head node. Note: The zero polynomial is represented by an ...

Spring定时任务@Scheduled注解使用方式_mangoBUPT的博客-程序员宝宝_spring 定时任务注解

使用使用@Scheduled cron表达式标注任务方法@Componentpublic class testTask { private Logger logger = LoggerFactory.getLogger(testTask.class); @Scheduled(cron = "0/5 * * * * ?") public void doTask() { logger.info(Thread.currentThread().getName()+"=

使用SQLCMD在SQLServer执行多个脚本_weixin_30421809的博客-程序员宝宝

关键词:SQLCMD   作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序,如我现在工作的公司,十几个客户,每个客户一个库,但是数据库结构、存储过程、视图等都是一模一样,每次执行脚本(以下称为升级),如果有一百个脚本,那么就要按顺序执行过千次,这种工作量可不是一个人能承受得了的。...

华为前员工揭密华为“薪酬真相”_followme163的博客-程序员宝宝

  我的情况:1978年生,北方某省会城市人,男,2000年毕业于北京某知名大学电子通讯相关专业,同年7月加入华为,经过技术支援部的一营实习,而后在市场部做产品线,即下过办事处,又待过总部,还去海外支援过三、四个月,于2003年下半年离职,工号22%%%,现闲居北京。  声明:本人所写均为本人亲身经历和华为同事的转述,但为避免透露真实身份,具体时间地点在不影响理解的前提下有所更改,请勿对号

随便推点

网站上传图片提示错误怎么办_qq_1547479934的博客-程序员宝宝_图片请求上传接口出现异常

网站上传图片出现错误,或错误提示原因1:99%是图片太大,可以换个图片,或者将图片压缩一下试试原因2:图片格式问题, 上传的格式不在允许范围。原因3:国外服务器, 网络卡顿,连接超时导致的上传错误,不排除存在其他问题的可能性,不同问题处理方法不同。...

Python输出时出现乱码“�밴���������. . . ”的解决方案_xgc0102的博客-程序员宝宝_python 命令行输出乱码

输出时出现“�밴���������. . . ”乱码解决方案左上角File下点击Setting...点击File Encodings修改Global Encoding为GBK重新运行程序不再出现乱码

jquery插件整理篇(一)导航类jq插件,菜单jq插件_国安小昊23的博客-程序员宝宝_jq插件

(1)Horizontal accordion: jQuery基于jQuery开发,非常简单的水平方向折叠控件。(2)jQuery-Horizontal Accordion具有XBOX360 blade界面风格的水平方向Accordion。(3)jQuery plugin: Accordion用于创建 折叠菜单的jQuery插件。(4

创建动态视图_weixin_30649641的博客-程序员宝宝

http://www.cbf107.com/CBF107Item.aspx?ID=79c98c3e-aea2-46f9-baa7-1ccd067e2a81SQLServer2005 Pivot 转置使用动态列(应用到视图)SQLServer2005 Pivot转置使用动态列(应用到视图)最近项目中用到Pivot对表进行转置,遇到一些问题,主要是Pivot转置的时候没有办法...

ARM Cortex-M底层技术(四)编写自己的启动代码 & ARM Cortex-M底层技术(七)KEIL MDK 分散加载-1-分散加载的结构_男神01号的博客-程序员宝宝

编写自己的启动代码上一篇扯了一些关于启动代码的应用方面的内容,列举了4种我自己遇到过的常见的启动代码应用,当然实际的应用肯定不止上一篇文章中提到的那几种,关键是大家懂了原理后根据实际的需求添加自己的应用,这个才是关键。这一片文章主要分享下如何编写自己的启动代码,你可能会说这种脱了裤子放屁的事情没必要的,CMSIS规范了标准的启动代码模板,各个厂商都会提供自己MCU的启动代码...

推荐文章

热门文章

相关标签