SpringBoot整合——阿里云对象存储(OSS)

2023-11-12

SpringBoot整合——阿里云对象存储

1 OSS介绍

在开发应用的过程中,我们经常会有用户需要实名认证之后才能访问的需求。

用户认证需要上传证件图片、首页轮播也需要上传图片,因此我们要做文件服务,阿里云oss是一个很好的分布式文件服务系统,所以我们只需要集成阿里云oss即可。

OSS本质上来说就是帮助我们存储图片、文件的一个地方。

2 项目集成阿里OSS

2.1 前置准备:账号服务开通

①申请阿里云账号
https://www.aliyun.com/?spm=5176.21213303.J_3207526240.1.4eb853c9FFk35J
②实名认证
③开通"对象存储OSS服务"
在这里插入图片描述
https://free.aliyun.com/product/storage/freetrial

④进入管理控制台
https://oss.console.aliyun.com/bucket
在这里插入图片描述

新用户免费体验三个月OSS

测试:手动上传文件

  1. 创建自己的bucket

因为这里只是为了演示,所以我好多功能没有开通,大家在使用OSS服务时候,可以根据自己业务场景需要来开通

在这里插入图片描述

  1. 开通之后,选择文件列表,测试手动上传文件
    在这里插入图片描述

  2. 选择上传文件,然后选择扫描文件,选择好文件或图片之后,点击上传
    在这里插入图片描述

  3. 上传完成之后,点击文件列表,可以看到文件已经上传成功,点击详情可以查看文件访问地址
    在这里插入图片描述

  4. 将url复制下来,然后在新的浏览器打开,可以发现成功访问
    在这里插入图片描述

2.2 SpringBoot项目集成OSS

官方文档

2.2.1 获取到AccessKey与Secret

①来到自己的工作台,将鼠标停留在头像上,选择AccessKey管理
在这里插入图片描述
②查看自己的AccessKey,如果没有就创建一个
在这里插入图片描述
③点击查看Secret
在这里插入图片描述

2.2.2 编写配置文件、配置类

①配置文件
application.properties:

# 阿里云oss配置
aliyun.oss.endpoint=oss-cn-hangzhou.aliyuncs.com//填写自己的即可
aliyun.oss.accessKeyId=LTAI5t7md8W*****//填写自己的即可
aliyun.oss.secret=dcusDHFIXN8u*****//填写自己的即可
aliyun.oss.bucket=***//填写自己的即可

endpoint获取:
在之前测试过的上传文件中,查看URL详情

在这里插入图片描述

或者如果之前没有创建的话,新建一个Bucket

在这里插入图片描述

②配置类

读取配置文件内容

@Component
public class ConstantOssPropertiesUtils implements InitializingBean {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.oss.secret}")
    private String secret;

    @Value("${aliyun.oss.bucket}")
    private String bucket;

    public static String ENDPOINT;
    public static String ACCESS_KEY_ID;
    public static String SERECT;
    public static String BUCKET;


    @Override
    public void afterPropertiesSet() throws Exception {
        ENDPOINT=endpoint;
        ACCESS_KEY_ID=accessKeyId;
        SERECT=secret;
        BUCKET=bucket;
    }
}

2.2.3 创建service与serviceImpl

service接口:

public interface FileService {

    /**
     * 上传文件到阿里云
     * @param file
     * @return
     */
    String upload(MultipartFile file);
}

serviceImpl:

注意:为了防止上传的不同文件重名,此处我采用了UUID+时间来避免此情况,大家可以根据自己的想法实现

@Service
public class FileServiceImpl implements FileService {
    //上传文件到阿里云
    @Override
    public String upload(MultipartFile file) {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.ENDPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SERECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKET;

        try{
            //创建OSS实例
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //上传文件流
            InputStream inputStream = file.getInputStream();
            String fileName = file.getOriginalFilename();
            //为了防止不同的文件因为有相同文件名而导致前一个文件被覆盖,将uuid添加到文件名中
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            fileName = uuid + fileName;
            //按照当前日期,创建文件夹,将文件上传到文件夹中 2022/10/22/01.jpg
            //导入joda工具类处理时间【当然也可以使用SimpleDateFormat】
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl + "/" + fileName;
            //调用方法实现上传
            ossClient.putObject(bucketName, fileName, inputStream);
            //关闭ossClient
            ossClient.shutdown();
            //上传之后的文件路径https://yygh-zi.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://" + bucketName + "." + endpoint + "/" + fileName;
            //返回url
            return url;
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        return null;
    }
}

2.2.4 编写controller调用

@RestController
@RequestMapping("/api/oss/file")
public class FileApiController {
    @Autowired
    private FileService fileService;
    //上传文件到阿里云oss
    @PostMapping("fileUpload")
    public Result fileUpload(MultipartFile file) {
        //获取上传文件
        String url = fileService.upload(file);
        return Result.ok(url);
    }
}

2.2.5 测试

此处因为我的项目整合了Swagger,所以我直接使用swagger来测试
在这里插入图片描述
想要整合Swagger的,可以参考下面的配置类

@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                //只显示api路径下的页面
                .paths(Predicates.and(PathSelectors.regex("/api/.*")))
                .build();
    }

    @Bean
    public Docket adminApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                //只显示admin路径下的页面
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build();
    }

    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-API文档")
                .description("本文档描述了网站微服务接口定义")
                .version("1.0")
                .contact(new Contact("zi", "http://zi.com", "493211102@qq.com"))
                .build();
    }

    private ApiInfo adminApiInfo(){
        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统微服务接口定义")
                .version("1.0")
                .contact(new Contact("zi", "http://zi.com", "49321112@qq.com"))
                .build();
    }
}

选择文件之后,点击try it out
在这里插入图片描述
查看阿里云控制台
在这里插入图片描述

至此,整合OSS成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合——阿里云对象存储(OSS) 的相关文章

随机推荐

  • WSL 2 网络配置

    文章目录 WSL 2 访问局域网内设备 WSL 2 访问本机 Windows WSL 2 访问非本机 Windows 设备 局域网内设备访问 WSL 2 本机 Windows 访问 WSL 2 非本机 Windows 设备访问 WSL 2
  • 支持向量机matlab代码程序_多核支持向量机原理及实现

    了解非线性支持向量机模型后 应该对支持向量机的原理与核技巧都有掌握 本文在传统非线性支持向量机基础上向大家介绍多核支持向量机 这里就不对支持向量机原理与核函数花费太多笔墨了 主要介绍将单核支持向量机转换为多核支持向量机的思想 原理介绍完之后
  • Some collections were archived because you’ve reached the shared requests limits.错误解决

    今天打开我的postman 发现我的一个collection不见了 左下角出现一个提示 Some collections were archived because you ve reached the shared requests li
  • win11安装WSA(安卓子系统)教程

    1 更新到最新版win11 截止2021年10月23日 最新版本号是22000 282 2 启用Windows沙盒和Windows虚拟机监控程序平台 控制面板打开程序与功能 启用或关闭Windows功能 找到这两个选项 打钩确定 等待安装
  • 机器学习实战第十四章-利用SVD简化数据

    一 什么是SVD SVD Singular Value Decomposition 奇异值分解 基本知识如下图所示 其中U和V都可以作为高维转低维的转换矩阵将原始高维冗余数据转换到一个低维无冗余语义空间中 从而实现数据的降维 SVD的应用
  • fastjson总结

    fastjson 版本 1 2 36 主要 API 序列化 API String JSON toJSONString Object 将对象序列化为 json 字符串 反序列化 API T JSON parseObject String st
  • 记一次mybatis-plus遇到的问题

    在用了 springboot 和 mybatis plus很久之后 有一天突然看到配置文件有点繁杂 想将相同的配置拉到application yml里 就在将配置拉过去后 问题就开始出现了 在调用 baseMapper method 的时候
  • 【杰发科技AC7802x测评】4,RTC串口输出

    起初我认为AC7802X的实时实钟会很难 我想留着以后再评吧 可是今天看了RTC说明突然开了悟了 原来RTC只是个计数器 我打开例程并没有发现RTC时钟的例程 到是有个秒中断例程 那也不要紧我把它的功能补全吧 typedef struct
  • 【C++基础学习】引起类模板被实例化情形总结

    在我们使用类模板时 只有当代码中使用了类模板的一个实例的名字 而且上下文环境要求必须存在类的定义时 这个类模板才被实例化 并不是每次使用一个类都要求知道该类的定义 1 声明一个类模板的指针和引用 不会引起类模板的实例化 因为没有必要知道该类
  • 虚拟DOM和真实DOM的区别

    DOM DOM意思是文档对象模型 Dcoument Object Model 它是一个结构化文本的抽象 操作DOM 所以 只要我们想要动态修改网页的内容的时候 我们就修改DOM var item document getElementByI
  • 第二章:25+ Python 数据操作教程(第十七节PYTHON 字典理解与示例)持续更新中

    在本教程中 我们将介绍 Python 中字典理解的工作原理 它包含各种示例 可以帮助您学习字典理解的概念以及如何在现实场景中使用它 什么是词典 字典是Python中的一种数据结构 用于存储数据 以便将值与其相关的键连接起来 大致来说 它的工
  • mac终端操作文件或文件夹(持续更新)

    1 复制文件夹 有文件 cp R 要复制的文件 要复制到哪个路径 2 复制文件 cp 要复制的文件 要复制到哪个路径 3 移动文件夹 mvdir 你要移动的文件夹 要移动到哪里
  • C++ 变量类型

    C 变量类型 变量其实只不过是程序可操作的存储区的名称 C 中每个变量都有指定的类型 类型决定了变量存储的大小和布局 该范围内的值都可以存储在内存中 运算符可应用于变量上 变量的名称可以由字母 数字和下划线字符组成 它必须以字母或下划线开头
  • 手搓のTensorRT网络

    用过TensorRT的基本都接触过trtexec 1 可以方便快捷地将你的ONNX模型转换为TensorRT的engine trtexec onnx model onnx 其中原理是啥 这就涉及到了另外一个库onnx tensorrt 2
  • git 获取不到gitLab创建的新分支

    当我们在日常开发功能的时候 肯定会涉及到新建分支的问题 这时候我们本地的IDE就无法去切换新创建好的分支 因为切换的时候根本找不到那个新建的分支 此时可以可以去通过刷新分支达到发现新分支的目的 找到项目的路径并打开Git Bash Here
  • 第一次作业

    include stm32f4xx h include sys h include delay h include led h include key h int main void u8 MENU NVIC PriorityGroupCo
  • Integer中parseInt(),valueOf(),toString()的区别

    1 parseInt String s int radix 以给出的radix解析s 当不给出radix时 与valueOf 的作用一样 只是s不要超出Integer的范围 2 valueOf String s 把s转换成Integer类型
  • c语言5的阶乘流程图_C语言学习 算法

    1 程序 对数据和操作的描述 算法 数据结构 程序 2 算法的特性 有穷性 在合理的范围内 确定性 无歧义 有零个或多个输入 有一个或多个输出 有效性 3 算法的表示 自然语言 日常用的语言 汉语 英语或其他语言 流程图 4 传统流程图即3
  • 记录Spring boot 项目中druid SQL验证报错但是系统功能正常 报后端报 merge sql error 前端数据查询正常

    异常代码 20 17 49 331 http nio 8081 exec 6 ERROR c a d f s StatFilter mergeSql 169 merge sql error dbType oracle druid 1 2 8
  • SpringBoot整合——阿里云对象存储(OSS)

    SpringBoot整合 阿里云对象存储 1 OSS介绍 在开发应用的过程中 我们经常会有用户需要实名认证之后才能访问的需求 用户认证需要上传证件图片 首页轮播也需要上传图片 因此我们要做文件服务 阿里云oss是一个很好的分布式文件服务系统