码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot整合阿里云OSS文件存储解决方案


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


    系列文章目录

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

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

    在这里插入图片描述


    专栏推荐

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

    文章目录

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

    🌟前言

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

    🌟介绍

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

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

    🌟准备

    1.创建bucket。这里要注意读写权限选择公共读。这里截图截错了。
    在这里插入图片描述
    2.创建用户RAM权限。注意复制key,只会出现一次。
    在这里插入图片描述

    🌟引入依赖

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    🌟配置文件

    进入实例查看endpoint:
    在这里插入图片描述

    aliyun:
      oss:
        endpoint: oss-cn-beijing.aliyuncs.com
        access-key-id: 你复制的accessID
        access-key-secret: 你复制的keyScret
        bucketname: 你创建的buckert名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    🌟配置类

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

    @ConfigurationProperties(prefix = "aliyun.oss")
    @Configuration
    @Data
    public class OssConfig {
        private String endpoint;
        private String accessKeyId;
        private String accessKeySecret;
        private String bucketName;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    🌟文件上传组件-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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    🌟上传文件接口

      /**
         * 头像上传
         * @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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    🌟写在最后

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


    请添加图片描述

  • 相关阅读:
    lnx和ln|x|
    vue和react的区别
    Day14-商品列表-上拉加载更多商品
    智慧工地网络广播系统
    【STL源码剖析】STL六大组件功能与运用(目录)
    Vue练习
    HashMap关键就这几个点,你Get到了?
    阿里云-Centos7配置Nginx实现HTTPS(保姆级安装教程-无脑执行)
    Django笔记二之连接数据库、执行migrate数据结构更改操作
    单片机是不是嵌入式呢,老生常谈了
  • 原文地址:https://blog.csdn.net/2302_79094329/article/details/133433695
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号