SpringBoot整合阿里云OSS文件存储解决方案

‍作者名称:DaenCode
作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
人生感悟:尝尽人生百味,方知世间冷暖。
所属专栏:SpringBoot实战


系列文章目录

以下是专栏部分内容,更多内容请前往专栏查看!

标题
一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码)
一张思维导图带你学会Springboot创建全局异常、自定义异常
一张思维导图带你打通SpringBoot自定义拦截器的思路
28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈
一张思维导图带你学会SpringBoot、Vue前后端分离项目线上部署
一张流程图带你学会SpringBoot结合JWT实现登录功能
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot异步任务实现下单校验库存
一张思维导图带你学会SpringBoot使用AOP实现日志管理功能

SpringBoot整合阿里云OSS文件存储解决方案_第1张图片


专栏推荐

  • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
  • 专门为RabbitMQ入门打造的专栏,持续更新中。。。。。。。。链接>>>>>>>《图解RabbitMQ》

文章目录

  • 系列文章目录
  • 专栏推荐
  • 前言
  • 介绍
  • 准备
  • 引入依赖
  • 配置文件
  • 配置类
  • 文件上传组件-service层
  • 上传文件接口
  • 写在最后

前言

对于项目中的文件存储有两张方案,一种是存储在项目中,另一种则是采用分布式存储。第一种解决方案,随着文件数量越来越多,对于文件上传下载的带宽有影响并且对于以后存储的扩容有很大的不便性。本文来说一张分布式存储中的云厂商文件系统解决方案,有关于阿里云OSS文件上传的使用。

介绍

官网:https://www.aliyun.com/product/oss?utm_content=se_1014317304
上述是官网地址,没有用过的,可以申请三个月的体验期。

它是具有与平台无关的Restful api接口。任何应用、时间、语言都可以访问。并且分为多种存储类型:标准存储类型、低频访问类型、归档访问类型、冷归档访问类型。其存储类型的数据热度从大到小一次为:标准、低频、归档、冷归档。

准备

1.创建bucket。这里要注意读写权限选择公共读。这里截图截错了。
SpringBoot整合阿里云OSS文件存储解决方案_第2张图片
2.创建用户RAM权限。注意复制key,只会出现一次
SpringBoot整合阿里云OSS文件存储解决方案_第3张图片

引入依赖

<dependency>
    <groupId>com.aliyun.ossgroupId>
    <artifactId>aliyun-sdk-ossartifactId>
    <version>3.15.1version>
dependency>
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖
<dependency>
    <groupId>javax.xml.bindgroupId>
    <artifactId>jaxb-apiartifactId>
    <version>2.3.1version>
dependency>
<dependency>
    <groupId>javax.activationgroupId>
    <artifactId>activationartifactId>
    <version>1.1.1version>
dependency>

<dependency>
    <groupId>org.glassfish.jaxbgroupId>
    <artifactId>jaxb-runtimeartifactId>
    <version>2.3.3version>
dependency>

配置文件

进入实例查看endpoint:
SpringBoot整合阿里云OSS文件存储解决方案_第4张图片

aliyun:
  oss:
    endpoint: oss-cn-beijing.aliyuncs.com
    access-key-id: 你复制的accessID
    access-key-secret: 你复制的keyScret
    bucketname: 你创建的buckert名称

配置类

创建OSS配置类,读取配置文件中的内容。

@ConfigurationProperties(prefix = "aliyun.oss")
@Configuration
@Data
public class OssConfig {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

文件上传组件-service层

上传流程:采用multipartFile。

  1. 读取OSSConfig配置类中的配置。
  2. 根据读取到的endpoint、accesskeyID、accessScret创建OSS客户端实例Ossclient。
  3. 配置实例参数。
  4. 获取上传的文件名、拓展名;定义上传后的文件名。
  5. 拼接路径
  6. 返回上传后的路径地址。
 @Autowired
    private OSSConfig ossConfig;

    /**
     * oss上传文件
     * 1.创建oss客户端实例
     * 2.配置实例参数
     * 3.拼接路径
     * @param file
     * @return
     */
    @Override
    public String uploadFile(MultipartFile file) {
        String endPoint=ossConfig.getEndpoint();
        String accessKeyId=ossConfig.getAccessKeyId();
        String accessKeyScret=ossConfig.getAccessKeySecret();
        String bucketName= ossConfig.getBucketName();
        //创建ossClient实例
        OSS ossClient= new OSSClientBuilder().build(endPoint,accessKeyId,accessKeyScret);
        //拼接路径
        String originFileName=file.getOriginalFilename();
        DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy/mm/dd");
        LocalDateTime localDateTime=LocalDateTime.now();
        //根据日期分类文件夹
        String folderName=dtf.format(localDateTime);
        //新文件名
        String newFileName= CommonUtil.getRandom(4);
        //获取拓展名
        String extension=originFileName.substring(originFileName.lastIndexOf("."));
        String newFile="user/"+folderName+"/"+newFileName+extension;
        //推送
        try {
            PutObjectResult result = ossClient.putObject(bucketName, newFile, file.getInputStream());
            if (result!=null){
                return "https://"+endPoint+"."+bucketName+"."+"/"+newFile;
            }
        } catch (IOException e) {
            throw new SelfException(GlobalExceptionEnum.FILE_UPLOAD_ERROR);
        }finally {
            ossClient.shutdown();
        }
        return null;
    }

上传文件接口

  /**
     * 头像上传
     * @param file 上传的文件
     * @return
     */
    @ApiOperation("头像上传")
    @PostMapping("upload")
    public JsonResult upload(@ApiParam(value = "文件") @RequestPart(value = "file")MultipartFile file){
        String path = fileService.uploadFile(file);
        if (StringUtils.isBlank(path)){
            return JsonResult.exceptionResponse(GlobalExceptionEnum.FILE_UPLOAD_ERROR);
        }
        return JsonResult.success("上传成功",path);
    }

写在最后

有关于SpringBoot整合阿里云OSS实现文件上传介绍到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

你可能感兴趣的:(SpringBoot实战,spring,boot,后端)