# FastDFS_Client **Repository Path**: wen_h/FastDFS_Client ## Basic Information - **Project Name**: FastDFS_Client - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-11-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README FastDFS-Client 1.26.7(2019-08-24) --- This is a java client lib for [FastDFS](https://github.com/happyfish100/fastdfs). ## 介绍 在原作者YuQing与yuqih发布的java客户端基础上进行了大量重构工作,便于Java工作者学习与阅读。 当前客户端单元测试全部通过,服务端版本是FastDFS_V5.07 主要特性 1. 对关键部分代码加入了单元测试,便于理解与服务端的接口交易,提高接口质量 2. 将以前对byte硬解析风格重构为使用 对象+注解 的形式,尽量增强了代码的可读性 3. 支持对服务端的连接池管理(commons-pool2) 4. 支持上传图片时候检查图片格式,并且自动生成缩略图 5. 在SpringBoot当中自动导入依赖 ## 参考文档 想要学习掌握更多FastDFS的架构原理可以参考本[项目文档](https://github.com/tobato/FastDFS_Client/wiki). ## 修改日志 版本更新情况请查看[修改日志](/CHANGELOG.md) ## 运行环境要求 由于笔者主要工作环境是SpringBoot,因此目前客户端主要依赖于SpringBoot org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE * JDK环境要求 1.7 * FastDFS服务端 5.07 测试通过 ## 单元测试 由于工作时间关系与解析原代码的复杂性,单元测试无法完全做到脱离FastDFS服务端,请见谅。 执行单元测试需要配置TestConstants文件当中参数 在Tracker与Storage都在一个机器的环境下 private static String ip_home = "192.168.1.105"; public static InetSocketAddress address = new InetSocketAddress(ip_home, FdfsMockSocketServer.PORT); public static InetSocketAddress store_address = new InetSocketAddress(ip_home, FdfsMockSocketServer.STORE_PORT); public static final String DEFAULT_STORAGE_IP = ip_home; 在Tracker与Storage不在一个机器的环境下 private static String ip_work = "192.168.174.47"; private static String ip_work_store = "192.168.174.49"; public static InetSocketAddress address = new InetSocketAddress(ip_work, FdfsMockSocketServer.PORT); public static InetSocketAddress store_address = new InetSocketAddress(ip_work_store, FdfsMockSocketServer.STORE_PORT); public static final String DEFAULT_STORAGE_IP = ip_work_store; ## FastDFS-Client使用方式 ### 1.在项目Pom当中加入依赖 Maven依赖为 com.github.tobato fastdfs-client 1.26.7 ### 2.将Fdfs配置引入项目 在Maven当中配置依赖以后,SpringBoot项目将会自动导入FastDFS依赖(感谢@Lzgabel)。 #### FastDFS-Client 1.26.4版本以前引入方式 将FastDFS-Client客户端引入本地化项目的方式非常简单,在SpringBoot项目`/src/[com.xxx.主目录]/conf`当中配置 /** * 导入FastDFS-Client组件 * * @author tobato * */ @Configuration @Import(FdfsClientConfig.class) // 解决jmx重复注册bean的问题 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class ComponetImport { // 导入依赖组件 } 对的,只需要一行注解 @Import(FdfsClientConfig.class)就可以拥有带有连接池的FastDFS Java客户端了。 >注意:`@EnableMBeanExport`解决问题JMX重复注册问题,[issue #8](../../issues/8) [issue #18](../../issues/8),不要再配置 `spring.jmx.enabled=false`,以免影响SpringBoot默认的JMX监控。 ### 3.在application.yml当中配置Fdfs相关参数 # =================================================================== # 分布式文件系统FDFS配置 # =================================================================== fdfs: so-timeout: 1501 connect-timeout: 601 thumb-image: #缩略图生成参数 width: 150 height: 150 tracker-list: #TrackerList参数,支持多个 - 192.168.1.105:22122 - 192.168.1.106:22122 如果有必要可以参考 apache.pool2 参数配置连接池属性,默认配置为 fdfs: ..其他配置信息.. pool: #从池中借出的对象的最大数目(配置为-1表示不限制) max-total: -1 #获取连接时的最大等待毫秒数(默认配置为5秒) max-wait-millis: 5*1000 #每个key最大连接数 max-total-per-key: 50 #每个key对应的连接池最大空闲连接数 max-idle-per-key: 10 #每个key对应的连接池最小空闲连接数 max_idle_per_key: 5 注意: key配置的是连接服务端的地址(IP+端口)连接情况,如果有连接不够用的情况可以调整以上参数 ### 4.使用接口服务对Fdfs服务端进行操作 主要接口包括 1. TrackerClient - TrackerServer接口 2. GenerateStorageClient - 一般文件存储接口 (StorageServer接口) 3. FastFileStorageClient - 为方便项目开发集成的简单接口(StorageServer接口) 4. AppendFileStorageClient - 支持文件续传操作的接口 (StorageServer接口) ## 常见问题 ### 1.如何在没有spring-boot的情况下使用 参考下面文章进行改造 https://blog.csdn.net/wzl19870309/article/details/74049204 ### 2.高并发下测试出现上传的文件和得到的返回路径的文件不是同一个 通过加大超时时间后解决 soTimeout: 1500 connectTimeout: 600 ### 3.新手不会用 阅读单元测试,从学习test/java/com/github/tobato/fastdfs/service下的单元测试入手 ## 其他参考资料 对于FDFS服务端相关的问题可以在下面的论坛找到一些材料 [FastDFS论坛](http://bbs.chinaunix.net/forum-240-1.html) [FastDFS常见问题](http://bbs.chinaunix.net/thread-1920470-1-1.html)