背景

在软件开发领域文件访问是绕不开的内容,无论是从最早的 FTP,还是到后来的 SFTP、WebDAV,乃至现在占据主流的 S3 兼容协议,文件存取一直在向着访问安全、接入简易和弹性扩展的方向演进。因此越来越多的云厂商或开源项目锚定 S3 协议不断开发各种衍生产品。

正好之前项目中涉及文件存取相关的需求,在适配和开发过程中遇到一些问题记录在此处。目前问题已经提交回官方并经过了一轮 Review,目前是待合并状态。

第一次封装

首先,我们定义一个 IStorageService 接口,并为该接口提供多个实现类,在实际使用时则通过配置项动态决定使用何种实现。基于演示的目的实际代码做了简化。

public interface IStorageService {

    Vendor getVendor();

    InputStream downloadFile(String path);
}

考虑到可能接入的兼容 S3 实现我们选取了 AWS S3,MinIO 和 Huawei OBS,接下来以标准的 AWS S3 为例。