fastdfs分布式文件系统之JAVA client工具类封装
来源:互联网 发布:花生壳远程监控软件 编辑:程序博客网 时间:2024/05/19 03:24
工具类当中进行连接池的初始化及上传、下载、删除功能的实现并在spring配置文件中配置,生成对应的java bean 方便其它类访问。
FastDfsUtil工具类
实现对连接池初始化、上传、删除功能的实现。
[java] view plain copy
- import java.net.SocketTimeoutException;
- import java.util.UUID;
- import org.csource.common.NameValuePair;
- import org.csource.fastdfs.StorageClient1;
- import org.csource.fastdfs.StorageServer;
- import org.csource.fastdfs.TrackerServer;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.xxxx.common.AppException;
- import com.xxxx.fastdfs.dto.ResultDto;
- import com.xxxx.fastdfs.exception.ERRORS;
- /**
- *
- * @ClassName: FastDfsUtil
- * @Description: fastdfs文件操作工具类 1).初始化连接池; 2).实现文件的上传与下载;
- * @author mr_smile2014 mr_smile2014@xxxx.com
- * @date 2015年11月25日 上午10:21:46
- *
- */
- public class FastDfsUtil {
- private static final Logger LOGGER = LoggerFactory
- .getLogger(FastDfsUtil.class);
- /** 连接池 */
- private ConnectionPool connectionPool = null;
- /** 连接池默认最小连接数 */
- private long minPoolSize = 10;
- /** 连接池默认最大连接数 */
- private long maxPoolSize = 30;
- /** 当前创建的连接数 */
- private volatile long nowPoolSize = 0;
- /** 默认等待时间(单位:秒) */
- private long waitTimes = 200;
- /**
- * 初始化线程池
- *
- * @Description:
- *
- */
- public void init() {
- String logId = UUID.randomUUID().toString();
- LOGGER.info("[初始化线程池(Init)][" + logId + "][默认参数:minPoolSize="
- + minPoolSize + ",maxPoolSize=" + maxPoolSize + ",waitTimes="
- + waitTimes + "]");
- connectionPool = new ConnectionPool(minPoolSize, maxPoolSize, waitTimes);
- }
- /**
- *
- * @Description: TODO(这里用一句话描述这个方法的作用)
- * @param groupName
- * 组名如group0
- * @param fileBytes
- * 文件字节数组
- * @param extName
- * 文件扩展名:如png
- * @param linkUrl
- * 访问地址:http://image.xxx.com
- * @return 图片上传成功后地址
- * @throws AppException
- *
- */
- public String upload(String groupName, byte[] fileBytes, String extName,
- String linkUrl) throws AppException {
- String logId = UUID.randomUUID().toString();
- /** 封装文件信息参数 */
- NameValuePair[] metaList = new NameValuePair[] { new NameValuePair(
- "fileName", "") };
- TrackerServer trackerServer = null;
- try {
- /** 获取fastdfs服务器连接 */
- trackerServer = connectionPool.checkout(logId);
- StorageServer storageServer = null;
- StorageClient1 client1 = new StorageClient1(trackerServer,
- storageServer);
- /** 以文件字节的方式上传 */
- String[] results = client1.upload_file(groupName, fileBytes,
- extName, metaList);
- /** 上传完毕及时释放连接 */
- connectionPool.checkin(trackerServer, logId);
- LOGGER.info("[上传文件(upload)-fastdfs服务器相应结果][" + logId
- + "][result:results=" + results + "]");
- ResultDto result = null;
- /** results[0]:组名,results[1]:远程文件名 */
- if (results != null && results.length == 2) {
- return linkUrl + "/" + results[0] + "/" + results[1];
- } else {
- /** 文件系统上传返回结果错误 */
- throw ERRORS.UPLOAD_RESULT_ERROR.ERROR();
- }
- } catch (AppException e) {
- LOGGER.error("[上传文件(upload)][" + logId + "][异常:" + e + "]");
- throw e;
- } catch (SocketTimeoutException e) {
- LOGGER.error("[上传文件(upload)][" + logId + "][异常:" + e + "]");
- throw ERRORS.WAIT_IDLECONNECTION_TIMEOUT.ERROR();
- } catch (Exception e) {
- LOGGER.error("[上传文件(upload)][" + logId + "][异常:" + e + "]");
- connectionPool.drop(trackerServer, logId);
- throw ERRORS.SYS_ERROR.ERROR();
- }
- }
- /**
- *
- * @Description: 删除fastdfs服务器中文件
- * @param group_name
- * 组名
- * @param remote_filename
- * 远程文件名称
- * @throws AppException
- *
- */
- public void deleteFile(String group_name, String remote_filename)
- throws AppException {
- String logId = UUID.randomUUID().toString();
- LOGGER.info("[ 删除文件(deleteFile)][" + logId + "][parms:group_name="
- + group_name + ",remote_filename=" + remote_filename + "]");
- TrackerServer trackerServer = null;
- try {
- /** 获取可用的tracker,并创建存储server */
- trackerServer = connectionPool.checkout(logId);
- StorageServer storageServer = null;
- StorageClient1 client1 = new StorageClient1(trackerServer,
- storageServer);
- /** 删除文件,并释放 trackerServer */
- int result = client1.delete_file(group_name, remote_filename);
- /** 上传完毕及时释放连接 */
- connectionPool.checkin(trackerServer, logId);
- LOGGER.info("[ 删除文件(deleteFile)--调用fastdfs客户端返回结果][" + logId
- + "][results:result=" + result + "]");
- /** 0:文件删除成功,2:文件不存在 ,其它:文件删除出错 */
- if (result == 2) {
- throw ERRORS.NOT_EXIST_FILE.ERROR();
- } else if (result != 0) {
- throw ERRORS.DELETE_RESULT_ERROR.ERROR();
- }
- } catch (AppException e) {
- LOGGER.error("[ 删除文件(deleteFile)][" + logId + "][异常:" + e + "]");
- throw e;
- } catch (SocketTimeoutException e) {
- LOGGER.error("[ 删除文件(deleteFile)][" + logId + "][异常:" + e + "]");
- throw ERRORS.WAIT_IDLECONNECTION_TIMEOUT.ERROR();
- } catch (Exception e) {
- LOGGER.error("[ 删除文件(deleteFile)][" + logId + "][异常:" + e + "]");
- connectionPool.drop(trackerServer, logId);
- throw ERRORS.SYS_ERROR.ERROR();
- }
- }
- public ConnectionPool getConnectionPool() {
- return connectionPool;
- }
- public void setConnectionPool(ConnectionPool connectionPool) {
- this.connectionPool = connectionPool;
- }
- public long getMinPoolSize() {
- return minPoolSize;
- }
- public void setMinPoolSize(long minPoolSize) {
- this.minPoolSize = minPoolSize;
- }
- public long getMaxPoolSize() {
- return maxPoolSize;
- }
- public void setMaxPoolSize(long maxPoolSize) {
- this.maxPoolSize = maxPoolSize;
- }
- public long getNowPoolSize() {
- return nowPoolSize;
- }
- public void setNowPoolSize(long nowPoolSize) {
- this.nowPoolSize = nowPoolSize;
- }
- public long getWaitTimes() {
- return waitTimes;
- }
- public void setWaitTimes(long waitTimes) {
- this.waitTimes = waitTimes;
- }
- }
property.properties文件配置
[java] view plain copy
- #fastdfs连接池最大连接数
- maxPoolSize=30
- #fastdfs等待时间(单位:秒)
- waitTimes=400
- #fastdfs连接池最小连接数
- minPoolSize=20
[java] view plain copy
- <bean id="propertyConfigurer"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:property.properties</value>
- </list>
- </property>
- </bean>
- <bean name="connectionPool" class="com.xxxx.fastdfs.pool.FastDfsUtil"
- init-method="init">
- <property name="minPoolSize" value="${minPoolSize}" />
- <property name="maxPoolSize" value="${maxPoolSize}" />
- <property name="waitTimes" value="${waitTimes}" />
- </bean>
error枚举类
[java] view plain copy
- package com.xxxx.fastdfs.exception;
- import com.xxxx.common.AppException;
- import com.xxxx.common.Module;
- /**
- *
- * @ClassName: ERRORS
- * @Description: 应用异常枚举类
- * @author mr_smile2014 mr_smile2014@xxxx.com
- * @date 2015年21月17日 上午10:22:39
- *
- */
- public enum ERRORS {
- PARAMETER_IS_NULL("21001", "必填参数为空", "必填参数为空"),
- FASTDFS_CONNECTION_FAIL("21002", "连接fastdfs服务器失败", "文件上传异常,请重试"),
- WAIT_IDLECONNECTION_TIMEOUT("21003", "等待空闲连接超时", "连接超时,请重试"),
- NOT_EXIST_GROUP("21004", "文件组不存在", "文件组不存在"),
- UPLOAD_RESULT_ERROR("21005", "fastdfs文件系统上传返回结果错误", "文件上传异常,请重试"),
- NOT_EXIST_PORTURL("21006", "未找到对应的端口和访问地址", "文件上传异常,请重试"),
- SYS_ERROR("21007", "系统错误", "系统错误"),
- FILE_PATH_ERROR("21008", "文件访问地址格式不对","文件访问地址格式不对"),
- DELETE_RESULT_ERROR("21009", "fastdfs文件系统删除文件返回结果错误", "文件删除异常,请重试"),
- NOT_EXIST_FILE("21010", "文件不存在", "文件不存在");
- /** 错误码 */
- String code;
- /** 错误信息,用于日志输出,便于问题定位 */
- String message;
- /** 错误提示,用于客户端提示 */
- String descreption;
- ERRORS(String code, String message) {
- this.message = message;
- this.code = code;
- }
- ERRORS(String code, String message, String descreption) {
- this.message = message;
- this.code = code;
- this.descreption = descreption;
- }
- public AppException ERROR() {
- return new AppException(Module.FASTDFS, this.code, this.message,
- this.descreption);
- }
- public AppException ERROR(String descreption) {
- return new AppException(Module.FASTDFS, this.code, this.message,
- descreption);
- }
- }
异常类
[java] view plain copy
- package com.xxxx.common;
- /**
- * 系统通用异常
- * @author mr_smile2014 mr_smile2014@xxxx.com
- *
- */
- public class AppException extends Exception {
- private static final long serialVersionUID = -1848618491499044704L;
- private Module module;
- private String code;
- private String description;
- public AppException(Module module, String code, String message) {
- super(message);
- this.module = module;
- this.code = code;
- }
- public AppException(Module module, String code, String message, String description) {
- super(message);
- this.module = module;
- this.code = code;
- this.description = description;
- }
- /**
- * 产生异常的模块
- *
- * @return
- */
- public Module getModule() {
- return module;
- }
- /**
- * 错误码
- *
- * @return
- */
- public String getCode() {
- return code;
- }
- /**
- * 用户可读描述信息
- *
- * @return
- */
- public String getDescription() {
- return description;
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(getClass().getName());
- sb.append(": [");
- sb.append(module);
- sb.append("] - ");
- sb.append(code);
- sb.append(" - ");
- sb.append(getMessage());
- if (getDescription() != null) {
- sb.append(" - ");
- sb.append(getDescription());
- }
- return sb.toString();
- }
- }
注:连接池ConnectionPool类使用的是上一篇文章的类,如果要使用直接去拷贝。
阅读全文
0 0
- fastdfs分布式文件系统之JAVA client工具类封装
- fastdfs分布式文件系统之JAVA client工具类封装
- 分布式文件系统之-FastDFS
- Java利用fastdfs-client-java开发工具包操作FastDFS分布式文件系统
- fastdfs-client-java工具类的使用
- fastdfs分布式文件系统之Storage server介绍
- fastdfs分布式文件系统之tracker server介绍
- Fastdfs分布式文件系统之文件同步机制
- Fastdfs分布式文件系统之文件同步机制
- Fastdfs分布式文件系统之文件同步机制
- 四、分布式文件系统fastDFS-Java Api
- 分布式文件系统FastDFS
- 分布式文件系统 FastDFS
- 分布式文件系统FastDFS
- FastDFS分布式文件系统
- 分布式文件系统 FastDFS
- fastDFS分布式文件系统
- 分布式文件系统FastDFS
- Windows搭建Python开发环境
- koa之处理器模块化
- gif图像分解、gif图像制作
- MVP 模式简单易懂的介绍方式
- 直接选择排序
- fastdfs分布式文件系统之JAVA client工具类封装
- 两个栈实现队列
- Atitit 人工智能目前的进展与未来 包含的技术 v2 r99.docx
- Weex的环境搭建及集成到Android Studio和趟过的坑
- Atitit 常用数据校验规则
- Android 启动活动的最佳写法
- Atitit 签名规范 attilax总结 安全签名规范 v2 r99.docx
- PTA 计算高考状元
- ConvenientBanner使用