阿里云OSS分布式存储

news2024/12/23 20:53:28

目录

🧂1.OSS开通 

🌭2.头像上传整合OSS 

🚍2.1.引入依赖

🚍2.2添加配置

🚍2.3创建配置类

🚍2.4添加实现类 

🚍2.5controller调用接口 

🚍2.6postman测试 


 1.OSS开通 

  • 1.登录阿里云,搜索oss

  • 2.创建bucket 

RAM权限:

  • 阿里云用于各个产品的权限,基于RBAC模型,进行简单管理账号、统一分配权限、集中管控资源,从而建立安全、完善的资源控制体系。
  • 众多产品,一般采用子账号进行分配权限,防止越权攻击

  • 3.创建用户,为其分配权限
  •  4.确定之后发送验证码

  • 5.获取AccessKey ID  ,AccessKey Secret;只出现一次,务必粘贴复制

  • 6. 按需添加权限 

2.头像上传整合OSS 

官方参考文档:OSS官网手册

2.1.引入依赖

            <!--阿里云OSS-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.15.1</version>
            </dependency>

2.2添加配置

yml文件没有提示,不要考虑是不是错了

#阿里云OSS
aliyun:
  oss:
    #地域节点
    endpoint: 
    access-key-id: 
    access-key-Secret: 
    bucket-name: hqdmdxz-user

2.3创建配置类

创建配置类,获取yml中的文件配置,注意@Value注解的使用

@Data
@Configuration
public class OssConfig {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.access-key-id}")
    private String accessKeyId;
    @Value("${aliyun.oss.access-key-Secret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucket-name}")
    private String bucketName;
}

2.4添加实现类 

  • 先上传文件,返回url地址,再和普通表单一并提交(推荐这种,更加灵活,失败率低)
  • 文件和普通表单一并提交(设计流程比较多,容易超时和失败)

注意:默认SpringBoot最大文件上传是1M,大家测试的时候注意一下

@Slf4j
@Service
public class FileServiceImpl implements FileService {


    @Autowired
    private OssConfig ossConfig;

    /**
     * 上传头像
     *
     * @param file
     * @return
     */
    @Override
    public String uploadUserImage(MultipartFile file) {
        //1.获取相关配置
        String bucketName = ossConfig.getBucketName();
        String endpoint = ossConfig.getEndpoint();
        String accessKeyId = ossConfig.getAccessKeyId();
        String accessKeySecret = ossConfig.getAccessKeySecret();
        //2.创建oss对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        //3.获取原始文件名
        String originalFilename = file.getOriginalFilename();
        //4.获取当前时间
        LocalDateTime nowTime = LocalDateTime.now();
        //5.格式化的模板
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        //6.将当前日期格式化
        String formatTime = dateTimeFormatter.format(nowTime);
        //7.获取uuid
        String uuid = CommonUtil.generateUUID();
        //8.获取文件后缀.jpg
        String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        //9.拼装路径oos存储路径  user/2024/03/22/2131241215.jpg
        String fileName = "user/" + formatTime + "/" + uuid + extension;

        try {
            //10.上传到oss
            PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, file.getInputStream());
            //11.返回拼装路径
            if (putObjectResult != null) {
                String imageUrl = "https://" + bucketName + "." + endpoint + "/" + fileName;
                return imageUrl;
            }
        } catch (IOException e) {
            log.error("文件上传失败:{}", e);
        } finally {
            //oss关闭,避免内存泄露
            ossClient.shutdown();
        }
        return null;
    }
}

2.5controller调用接口 

上传文件,调用接口实现类,返回图片地址

    @Autowired
    private FileService fileService;

    /**
     * 上传头像
     *
     * @return
     */
    @ApiOperation("头像上传")
    @PostMapping("/upload")
    public JsonData uploadUserImage(
            @ApiParam(value = "文件上传", required = true)
            @RequestPart("file") MultipartFile file) {

        String imageUrl = fileService.uploadUserImage(file);

        if (imageUrl != null) {
            return JsonData.buildSuccess(imageUrl);
        }
        return JsonData.buildResult(CodeEnum.FILE_UPLOAD_USER_IMAGE_ERROR);
    }

2.6postman测试 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1538654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache James数据库存储用户信息的密码加密问题

项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题&#xff1a; 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…

能被整除的数

给定一个整数 n 和 m个不同的质数 p1,p2,…,pm。 请你求出 1∼n中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。 输入格式 第一行包含整数 n 和 m。 第二行包含 m 个质数。 输出格式 输出一个整数&#xff0c;表示满足条件的整数的个数。 数据范围 1≤n≤10^5 …

30V转5V 1A 30降压12V 1A DCDC低电压恒压IC 车充芯片-H4110

30V转5V和30V转12V的DCDC低电压恒压IC&#xff08;也称为降压恒压芯片或车充芯片&#xff09;工作原理如下&#xff1a; 输入电压识别&#xff1a;芯片首先识别输入的30V电压&#xff0c;并准备进行转换。 PWM控制&#xff1a;芯片内部的控制逻辑生成PWM信号。这个信号用于控制…

6个免费的ChatGPT网站

AI 大模型的出现给时代带来了深远的影响&#xff1a; 改变了产业格局&#xff1a;AI 大模型的发展推动了人工智能技术在各行业的广泛应用&#xff0c;改变了传统产业的运作方式&#xff0c;促进了新兴产业的崛起&#xff0c;如智能驾驶、医疗健康、金融科技等。提升了科学研究…

2024-3-22-Qtday3作业

1> 思维导图 2> 要求&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否…

家用路由器和企业路由器的区别?

一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口&#xff0c;WAN口接公网一个地址&#xff0c;LAN口接你电脑一个IP地址&#xff0c;完全符合路由器的设计&#xff0c;而因为家里如果用了&#xff0c;说明要接多个电脑&#xff0c;那么如果还需要对每个接口…

Web核心简介

简介 web&#xff1a;全球广域网&#xff0c;也称万维网(www)&#xff0c;能够通过浏览器访问的网站 JavaWeb&#xff1a;是用Java技术来解决相关web互联网领域的技术栈 JavaWeb技术栈 B/S架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的…

2024年超声波清洗机品牌哪家好?实力担当超声波清洗机大集合

随着佩戴眼镜人群越来越多&#xff0c;眼镜清洗的需求也是越来越大了&#xff01;也许有人佩戴了十几年眼镜都不知道超声波清洗机是要清洗的&#xff0c;也许有人一开始就注重眼镜的清洗。其实眼镜清洗是一件很简单的事情&#xff0c;可以用超声波清洗机来清洗眼镜。目前超声波…

LeetCode Python - 70. 爬楼梯

目录 题目描述解法方法一&#xff1a;递推方法二&#xff1a;矩阵快速幂加速递推方法三 运行结果方法一方法二方法三 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1…

伊理威科技:抖音开网店新手刚做选啥品

在数字浪潮中&#xff0c;抖音不仅是展示才艺的舞台&#xff0c;更是创业者的新天地。新手若想在这片热土上开垦网店&#xff0c;选品便是首要课题。选择产品如同种下希望的种子&#xff0c;既要考量土壤肥沃度&#xff0c;也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…

Data Interpreter: An LLM Agent For Data Science 论文解读

论文地址&#xff1a;https://arxiv.org/abs/2402.18679 Github&#xff1a;MetaGPT: The Multi-Agent Framework 数据解释器&#xff08;Data Interpreter&#xff09;是一个基于大型语言模型&#xff08;LLM&#xff09;的代理&#xff0c;专门为解决数据科学问题而设计。它…

Flume详解(2)

Flume Sink HDFS Sink 将数据写到HDFS上。数据以文件形式落地到HDFS上&#xff0c;默认是以FlumeData开头&#xff0c;可以通过hdfs.filePrefix来修改 HDFS Sink默认每隔30s会滚动一次生成一个文件&#xff0c;因此会导致在HDFS上生成大量的小文件&#xff0c;实际过程中&am…

【力扣刷题日记】603.连续空余座位

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 603.连续空余座位 表&#xff1a;Cinema 列名类型seat_idintfreebool Seat_id 是该表的自动递增主键列。 在…

数学建模(层次分析法 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 例题&#xff1a;从景色、花费、饮食&#xff0c;男女比例四个方面去选取目的地 准则重要性矩阵&#xff1a; 每个准则的方案矩阵&#xff1a;​ 一致性检验&#xff1a; 特征值法求权值&#xff1a; 完整代码&#xff1a; 运行结…

2024最新版pycharm激活码【资源共享】一键复制

好用的话 家人们记得点个赞喔 VPXI6TDKOQ-eyJsaWNlbnNlSWQiOiJWUFhJNlRES09RIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5rA5rS7IHd3d8K3YWppaHVvwrdjb20iLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaG…

STM32不使用中断实现定时器微秒级精确延时

我们在写代码的时候避免不了要使用延时函数&#xff0c;很多延时函数都是使用中断或者tick来实现的&#xff0c;tick的方式最大到毫秒ms级别&#xff0c;通过中断方式的通用定时器来实现&#xff0c;如果实现1us的延时那么每1us就来一次中断&#xff0c;很影响cpu的效率。 本文…

haproxy 高可用

一 haproxy HAProxy简介 HAProxy提供高可用、负载均衡以及基于TCP和HTTP的应用代理&#xff0c;适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器&#xff0c;防止内部服务器遭受攻击。 HAProxy特点和优点&#xff1a; 1.支持原声SSL,同时支持客户端和…

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境&#xff1a;Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…

火哥Windows内核第五期

主要讲解windows的保护模式&#xff0c;系统调试&#xff0c;异常发现及处理等等。事件等待、异常、软件调试、内存管理、消息机制、调试器开发项目、内核工具开发项目&#xff0c;发展方向:CC驱动开发&#xff0c;软件逆向&#xff0c;破解&#xff0c;游戏保护&#xff0c;反…

huggingface的transformers训练bert

目录 理论 实践 理论 https://arxiv.org/abs/1810.04805 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;由Google在2018年提出。它是基于Transformer模型的预训练方法…