对接fastDFS存储组件设计文档

设计背景

  • 对接私有化存储组件,解耦现行对象存储KS3

设计目标

  • 成功解耦现行对象存储KS3
  • 完成基于配置文件灵活配置实现对接不同种类的私有化存储组件
  • 提取接口实现面向接口完成文件上传下载更新

设计思路

  • 通过参数控制的方式初始化不同的私有化存储实现类,面向接口调用实现文件上传、下载、删除

功能设计

代码目录

  • processor

    • conifg

      • FastDFSConfig
      • FileHandlerType
      • InitConfig
      • KS3Config
    • exception

      • FastDFSException
    • fastDFS

      • FastDFSFileHandler
    • ks3

      • KS3FileHandler
    • util

      • FileUtil

      FileHandler

接口设计

init 初始化
  • 接口代码
public void init(FileHandlerType type, InitConfig initConfig);
  • 参数
参数名称参数描述
FileHandlerType文件处理器类型[ks3,fastDFS]
InitConfig初始化配置对象
public class InitConfig {
    private KS3Config ks3Config;
    private FastDFSConfig fastDFSConfig;
}    
  • 配置类属性
public class KS3Config {
    private String ak;
    private String sk;
    private String endpoint;
    private String bucket;
    private int timeout;
}

public class FastDFSConfig {
    String fastdfsConfigPath;
}
  • 初始化失败将产生异常,需在业务代码中手动处理异常
upload 文件上传
  • 接口代码
public String upload(byte[] bytes, String key)
  • 参数
参数名称参数说明
byte[]文件字节数组
key文件标识(一般以文件名作为key,fastDFS可以重复,ks3不可重复)
  • 返回值
返回值类型返回值说明例子
String类型字符串文件访问全路径group1/M00/00/00/wKg7Z1vgElSACjysAAXYM5DIOHQ518.jpg
http://ks3-cn-beijing.ksyun.com/securitycloud/1.jpg
  • 上传失败将抛出异常,需在业务代码中手动处理异常
download 文件下载
  • 接口代码
public byte[] download(String key)
  • 参数
参数名称参数说明
key文件标识,ks3方式为upload时上传时的key,fastDFS为上传时的返回值
  • 返回值
返回值类型返回值说明
byte[]文件字节数组
  • 下载失败将抛出异常,需在业务代码中手动处理异常
delete 文件删除
  • 接口代码
public void delete(String key)
  • 参数
参数名称参数说明
key文件标识,ks3方式为upload时上传时的key,fastDFS为上传时的返回值
  • 删除失败将抛出异常,需在业务代码中手动处理异常

异常处理

  • 自定义异常类FastDFSException
public class FastDFSException extends RuntimeException {

    public static final String UN_INIT_EXCEPTION = "fastDFS未进行配置文件初始化,或者初始化配置文件失败";

    public static final String INPUT_STREAM_ISNULL = "输入文件流为空";

    public static final String FILENAME_ISNULL = "输入文件名为空";

    public static final String FILE_SUFFIX_ERROR = "文件名格式有误,获取文件名后缀失败";

    public static final String FILE_UPLOAD_FAILED = "文件上传失败";

    public static final String FILEPATH_ISNULL = "输入文件全路径为空";

    public static final String FILE_NOT_EXIST = "文件不存在";

    public static final String FILE_DOWNLOAD_FAILED = "文件下载失败";

    public static final String FILE_DELETE_FAILED = "文件删除失败";

    String message;

    public FastDFSException() {
        super();
    }

    public FastDFSException(@NotNull  String message) {
        super(message);
    }

    public FastDFSException(@NotNull String message, Exception e) {
        super(message,e);
    }

}
  • KS3产生的异常由引用的金山云ks3包封装。

配置文件说明

fastdfs-client.properties
# 连接超时 针对connect调用时超时 单位s
fastdfs.connect_timeout_in_seconds = 5
# socket send/write和recv/read的连接超时时间  单位s
fastdfs.network_timeout_in_seconds = 30
# 编码格式
fastdfs.charset = UTF-8
# 设置为true表示开启token验证
fastdfs.http_anti_steal_token = false
# 密钥
fastdfs.http_secret_key = FastDFS1234567890
# tracker服务的http端口
fastdfs.http_tracker_http_port = 80
# 客户端连接tracker服务的ip端口配置
fastdfs.tracker_servers = 172.16.2.2:22122,172.16.2.21:22122

使用demo(springboot)

  • 代码实例
@Service
public class FileService {

    private FileHandler fileHandler;

    @Value("${file.handler.type}")
    public String fileHandlerType;

    private int retryTime = 3;
    private int timeout = 5000;

    @Value("${ks3.ak}")
    private String ak;
    @Value("${ks3.sk}")
    private String sk;
    @Value("${ks3.endpoint}")
    private String endpoint;
    @Value("${ks3.bucket}")
    private String bucket;

    @PostConstruct
    public void init() {
        fileHandler = new FileHandler();
        InitConfig initConfig = new InitConfig();
        initConfig.setKs3Config(ak, sk, endpoint,bucket, timeout);
        String configPath = this.getClass().getResource("/fastdfs-client.properties").getPath();
        initConfig.setFastDFSConfig(configPath);
        try {
            if (fileHandlerType.equals(FileHandlerType.fastDFS.name())) {
                fileHandler.init(FileHandlerType.fastDFS,initConfig);
            } else if (fileHandlerType.equals(FileHandlerType.ks3.name())) {
                fileHandler.init(FileHandlerType.ks3,initConfig);
            } else {
                throw new RuntimeException("注入的fileHandlerType不符合预设标准");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public FileHandler getFileHandler() {
        return fileHandler;
    }
  • 流程说明

首先封装InitConfig配置类,将所有的参数进行配置,然后调用init方法,通过配置文件中的fileHandlerType进行判断使用何种私有化存储。实现基于配置文件灵活配置。

源码路径

https://download.csdn.net/download/lpp_dd/10782267

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值