背景

在互联网发展的今天,近乎所有的云厂商都提供对象存储服务。一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

当我们在使用对应云厂商产品的时候,只需要引入对应尝试提供的 SDK ,根据其开发文档实现即可。但是当我们接入的云厂商较多(或者能够保证接口水平迁移时),我们要根据目标厂商接口破坏性修改

如下提供了几家厂商接口 SDK 上传实例:

阿里云

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. String accessKeyId = "<yourAccessKeyId>";
  4. String accessKeySecret = "<yourAccessKeySecret>";
  5. // 创建OSSClient实例。
  6. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  7. // 创建PutObjectRequest对象。
  8. String content = "Hello OSS";
  9. PutObjectRequest putObjectRequest = new PutObjectRequest("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()));
  10. // 上传字符串。
  11. ossClient.putObject(putObjectRequest);
  12. // 关闭OSSClient。
  13. ossClient.shutdown();

华为云

  1. String endPoint = "https://your-endpoint";
  2. String ak = "*** Provide your Access Key ***";
  3. String sk = "*** Provide your Secret Key ***";
  4. // 创建ObsClient实例
  5. ObsClient obsClient = new ObsClient(ak, sk, endPoint);
  6. obsClient.putObject("bucketname", "objectname", new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名

七牛云

  1. Configuration cfg = new Configuration(Region.region0());
  2. UploadManager uploadManager = new UploadManager(cfg);
  3. String accessKey = "your access key";
  4. String secretKey = "your secret key";
  5. String localFilePath = "/home/qiniu/test.png";
  6. String key = null;
  7. Auth auth = Auth.create(accessKey, secretKey);
  8. String upToken = auth.uploadToken(bucket);
  9. Response response = uploadManager.put(localFilePath, key, upToken);

解决方案

Amazon S3 协议

Amazon 是最早提供对象存储服务 的厂商,制定文件存储相关的业内标准,这意味着只需要实现 S3 协议即可接入兼容此协议的文件存储厂商和中间件。当然 S3 协议不仅仅是技术实现要求标准,对于可用性等都有具体的要求。

兼容 S3 协议国内云厂商

名称 地址
阿里云 https://www.aliyun.com
华为云 https://www.huaweicloud.com
腾讯云 https://cloud.tencent.com
七牛云 https://www.qiniu.com
金山云 https://www.ksyun.com

如何使用

  • 引入依赖。 引入此依赖,无需在引入云厂商 SDK
  1. <dependency>
  2. <groupId>com.pig4cloud.plugin</groupId>
  3. <artifactId>oss-spring-boot-starter</artifactId>
  4. <version>0.0.1</version>
  5. </dependency>
  • 配置文件存储
  1. oss:
  2. path-style-access: false #请求路径是否 XXX/{bucketName}
  3. endpoint: s3-cn-east-1.qiniucs.com
  4. access-key: xxx # 云厂商提供的key
  5. secret-key: xxx # 云厂商提供的密钥
  6. bucketName: pig4cloud # 上文创建的桶名称
  • 操作

  1. @Autowire
  2. private final OssTemplate ossTemplate;
  3. ossTemplate.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());

支持 MINIO 等自建文件存储

  • 创建 minio
  1. docker run -p 9000:9000 --name minio1 \
  2. -e "MINIO_ACCESS_KEY=lengleng" \
  3. -e "MINIO_SECRET_KEY=lengleng" \
  4. minio/minio server /data
  • 配置 minio 参数
  1. # 文件系统
  2. oss:
  3. path-style-access: true
  4. endpoint: http://IP:9000
  5. access-key: lengleng
  6. secret-key: lengleng
  7. bucketName: lengleng
  • 使用 OssTemplate 上传即可

源码地址:

https://github.com/pig-mesh/oss-spring-boot-starter 欢迎 fork 扩展

项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

「一站式」兼容所有云厂商文件存储Spring Boot 实现的更多相关文章

  1. 基于properties文件的Spring Boot多环境切换

    当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢?     在Spring Boot中,多环境配置的文件名需要满足appl ...

  2. 在Mac中使用「dd」指令烧录ISO镜像文件到U盘

    作者:超級efly   發布:2014-07-26 20:22   分類:電腦   閱讀:442   11條評論    大家在Windows系統下可以方便的使用UltraISO程式來燒錄「.ISO」, ...

  3. spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)

    一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...

  4. Android内存管理(12)*「实例」用Monitor 生成.hprof文件 并分析内存泄漏

    参考 http://blog.csdn.net/xiaanming/article/details/42396507 基本步骤: 1,准备一个有内存泄漏的代码 2,如何发现内存泄漏 3,生成.hpro ...

  5. 「thunar」给thunar增加搜索文件功能

    1.安装catfish sudo apt-get install catfish 2.配置thunar,添加[自定义动作] 打开 Thunar 后,点击 Edit -> Configure cu ...

  6. mybatis 热部署xml文件(spring boot和springmvc两种方式)

    参考:http://thinkgem.iteye.com/blog/2304557 步骤:1.创建两个java类 (1)MapperRefresh.java   :用于刷新mapper (2)SqlS ...

  7. 「MoreThanJava」计算机系统概述

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. Spring Boot 2.x基础教程:实现文件上传

    文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作. ...

  9. Spring Boot 2.x基础教程:多个文件的上传

    昨天,我们介绍了如何在Spring Boot中实现文件的上传.有读者问:那么如果有多个文件要同时上传呢?这就马上奉上,当碰到多个文件要同时上传的处理方法. 动手试试 本文的动手环节将基于Spring ...

随机推荐

  1. 验证销售部门的数据查看权限-脚本demo

    1 # coding:utf-8 2 ''' 3 @file: run_old.py 4 @author: jingsheng hong 5 @ide: PyCharm 6 @createTime: ...

  2. 配置伪分布模式下的hadoop以及采用fuse-dfs来访问HDFS

    实验目标 配置环境的主要目的是得到HDFS的客户端fuse-dfs的IO性能.本来的服务器上没有任何环境,因此安装均是从无到有的.系统是Ubuntu server 14.04 amd64.整个过程参考 ...

  3. 1022 Digital Library——PAT甲级真题

    1022 Digital Library A Digital Library contains millions of books, stored according to their titles, ...

  4. EF多个表映射

    public class Media // One entity table { public int Id { get; set; } public string Name { get; set; ...

  5. 从HashMap面试聊聊互联网内卷

    微信公众号:大黄奔跑 关注我,可了解更多有趣的面试相关问题. 写在之前 毫无疑问,回想2020年有什么词出现在眼前最多的,无疑是"996"和"内卷",从马老师的 ...

  6. OLAP分析

    OLAP分析 1 视频教程 视频教程 如果对资源下载.分析操作有疑问,直接跟着视频做一遍即可. 2 数据集合说明 FoodMart,其为一家食品连锁店经营产生的数据存放的数据库,包括销售数据.库存数据 ...

  7. 后端程序员之路 24、Redis hiredis

    Redishttps://redis.io/ Redis快速入门 - Redis教程http://www.yiibai.com/redis/redis_quick_guide.html wget ht ...

  8. jquery通过live绑定toggle事件

    $("a[name=reply]").live("click",function(){ $(this).toggle( function () { var $c ...

  9. Linux 切换 shell

    查看当前已安装的shell [root@CentOSv64 my]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tc ...

  10. c++指针类型的函数

    下面随笔将讲述c++指针类型的函数. 原创链接:https://www.cnblogs.com/iFrank/p/14444379.html 指针类型的函数 若函数的返回值是指针,该函数就是指针类型的 ...