Skip to content

一个基于AmazonS3协议开发的通用对象存储操作工具包

License

Notifications You must be signed in to change notification settings

llllllxy/tiny-oss-boot-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tiny-oss-boot-starter

SpringBoot star fork

1、简介

tiny-oss-boot-starter是一个完全兼容AmazonS3协议标准的的对象存储服务操作工具包,理论上所有兼容S3协议的存储平台均可使用。

2、如何使用

引入依赖

    <dependency>
        <groupId>top.lxyccc</groupId>
        <artifactId>tiny-oss-boot-starter</artifactId>
        <version>1.0.1</version>
    </dependency>

在application.yml里配置

配置示例(minio):

tiny-oss:
  endpoint: http://127.0.0.1:9091
  region: us-east-1
  accessKey: minioadmin
  secretKey: minio1234

在SpringBoot里使用

(1)、注入OssTemplate

    import org.springframework.beans.factory.annotation.Autowired;

    @Autowired
    private OssTemplate ossTemplate
    
   // 上传示例
   ossTemplate.putObject( bucketName,  objectName, InputStream stream, String contextType);
   ...

(1)、功能接口一览

    /**
     * 创建bucket
     * @param bucketName bucket名称
     */
    void createBucket(String bucketName);

    /**
     * 获取所有的bucket
     * @return Bucket列表
     */
    List<Bucket> getAllBuckets();

    /**
     * 通过bucket名称删除bucket
     * @param bucketName bucket名称
     */
    void removeBucket(String bucketName);

    /**
     * 上传文件
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param stream 文件流
     * @param contextType 文件类型
     * @return true 成功,false 失败
     */
    boolean putObject(String bucketName, String objectName, InputStream stream, String contextType);

    /**
     * 上传文件
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param stream 文件流
     * @return true 成功,false 失败
     */
    boolean putObject(String bucketName, String objectName, InputStream stream);

    /**
     * 获取文件
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @return S3Object(可以通过InputStream inputStream = s3Object.getObjectContent()来获取InputStream)
     */
    S3Object getObject(String bucketName, String objectName);

    /**
     * 获取对象的url链接
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @param expires 过期时间
     * @return 链接
     */
    String getObjectURL(String bucketName, String objectName, Integer expires);

    /**
     * 通过bucketName和objectName删除对象
     * @param bucketName bucket名称
     * @param objectName 文件名称
     * @return true 成功,false 失败
     */
    boolean removeObject(String bucketName, String objectName);

    /**
     * 根据文件前置查询文件
     * @param bucketName bucket名称
     * @param prefix 前缀
     * @param recursive 是否递归查询
     * @return S3ObjectSummary 列表
     */
    List<S3ObjectSummary> getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive);

4、AmazonS3扩展知识

什么是AmazonS3?

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/Welcome.html

Amazon Simple Storage Service(Amazon S3,Amazon简便存储服务)是 AWS 最早推出的云服务之一,经过多年的发展,S3 协议在对象存储行业事实上已经成为标准。

  • 提供了统一的接口 REST/SOAP 来统一访问任何数据
  • 对 S3 来说,存在里面的数据就是对象名(键),和数据(值)
  • 不限量,单个文件最高可达 5TB,可动态扩容。
  • 高速。每个 bucket 下每秒可达 3500 PUT/COPY/POST/DELETE 或 5500 GET/HEAD 请求。
  • 具备版本,权限控制能力
  • 备数据生命周期管理能力
  • 作为一个对象存储服务,S3 功能真的很完备,行业的标杆,目前市面上大部分OSS对象存储服务都支持AmazonS3。

支持的厂商有:

  • 阿里云OSS兼容S3
  • 华为云OBS兼容S3
  • 七牛云Kodo兼容S3
  • 又拍云USS兼容S3
  • 腾讯云COS兼容S3
  • 百度云BOS兼容S3
  • Minio兼容S3

市面上OSS对象存储服务基本都支持AmazonS3,我们封装我们的自己的starter那么就必须考虑适配,迁移,可扩展。 比喻说我们今天使用的是阿里云OSS对接阿里云OSS的SDK,后天我们使用的是腾讯COS对接是腾讯云COS, 我们何不直接对接AmazonS3实现呢,这样后续不需要调整代码,只需要去各个云服务商配置就好了。