
「一站式」兼容所有云厂商文件存储Spring Boot 实现
发布日期:2021-05-09 04:22:00
浏览次数:22
分类:博客文章
本文共 2479 字,大约阅读时间需要 8 分钟。
背景
在互联网发展的今天,近乎所有的云厂商都提供对象存储服务。一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
当我们在使用对应云厂商产品的时候,只需要引入对应尝试提供的 SDK ,根据其开发文档实现即可。但是当我们接入的云厂商较多(或者能够保证接口水平迁移时),我们要根据目标厂商接口破坏性修改。
如下提供了几家厂商接口 SDK 上传实例:
阿里云
// Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";String accessKeyId = "";String accessKeySecret = " ";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 创建PutObjectRequest对象。String content = "Hello OSS";PutObjectRequest putObjectRequest = new PutObjectRequest(" ", " ", new ByteArrayInputStream(content.getBytes()));// 上传字符串。ossClient.putObject(putObjectRequest);// 关闭OSSClient。ossClient.shutdown();
华为云
String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);obsClient.putObject("bucketname", "objectname", new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名
七牛云
Configuration cfg = new Configuration(Region.region0());UploadManager uploadManager = new UploadManager(cfg);String accessKey = "your access key";String secretKey = "your secret key";String localFilePath = "/home/qiniu/test.png";String key = null;Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);Response response = uploadManager.put(localFilePath, key, upToken);
解决方案
Amazon S3 协议
Amazon 是最早提供对象存储服务 的厂商,制定文件存储相关的业内标准,这意味着只需要实现 S3 协议即可接入兼容此协议的文件存储厂商和中间件。当然 S3 协议不仅仅是技术实现要求标准,对于可用性等都有具体的要求。
兼容 S3 协议国内云厂商
名称 | 地址 |
---|---|
阿里云 | |
华为云 | |
腾讯云 | |
七牛云 | |
金山云 |
如何使用
- 引入依赖。 引入此依赖,无需在引入云厂商 SDK
com.pig4cloud.plugin oss-spring-boot-starter 0.0.1
- 配置文件存储
oss: path-style-access: false #请求路径是否 XXX/{bucketName} endpoint: s3-cn-east-1.qiniucs.com access-key: xxx # 云厂商提供的key secret-key: xxx # 云厂商提供的密钥 bucketName: pig4cloud # 上文创建的桶名称
- 操作
@Autowireprivate final OssTemplate ossTemplate;ossTemplate.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
支持 MINIO 等自建文件存储
- 创建 minio
docker run -p 9000:9000 --name minio1 \ -e "MINIO_ACCESS_KEY=lengleng" \ -e "MINIO_SECRET_KEY=lengleng" \ minio/minio server /data
- 配置 minio 参数
# 文件系统oss: path-style-access: true endpoint: http://IP:9000 access-key: lengleng secret-key: lengleng bucketName: lengleng
- 使用 OssTemplate 上传即可
源码地址:
欢迎 fork 扩展
项目推荐:
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月01日 02时33分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
k8s之PV、PVC、StorageClass详解
2021-05-09
你真的了解Innodb存储引擎?
2021-05-09
FeWeb基础之JavaScript简介
2021-05-09
设计模式学习笔记(二十三:解释器模式)
2021-05-09
算法笔记_069:Floyd算法简单介绍(Java)
2021-05-09
Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
2021-05-09
Deepin_使用Python+MySQL创建工作日志记录
2021-05-09
dpdk在虚拟机上出错处理
2021-05-09
Macbook 彻彻底底的卸载MySQL
2021-05-09
ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证
2021-05-09
SQL Server 列存储索引 第二篇:设计
2021-05-09
ADF 第五篇:转换数据
2021-05-09
Databricks 第4篇:pyspark.sql 分组统计和窗口
2021-05-09
博客系列目录
2021-05-09
部署AlwaysOn第二步:配置AlwaysOn,创建可用性组
2021-05-09
Execute SQL Task 第二篇:返回结果集
2021-05-09
SSISDB2:SSIS工程的操作实例
2021-05-09
业务工作流平台设计(七)
2021-05-09
业务工作流平台设计(八)
2021-05-09
大视角、大方向、大问题、大架构:(二)应用的相关问题
2021-05-09