SpringBoot整合阿里云实现图片的上传管理

news2024/11/17 23:40:48

唠嗑部分

各位小伙伴大家好,我是全栈小白,之前我们分享了一期SpringBoot如何整合七牛云存储实现图片的上传与存储,今天我们接着分享一下SpringBoot整合阿里云OSS实现图片的上传与存储

言归正传

一、阿里云账号注册

阿里云OSS文件存储是免费的,注册比较简单,支付宝扫码登录,认证就好了

1、阿里云账号注册

官网:https://www.aliyun.com/

image-20240420154932440

之前没用过的,直接点击开通就好了

image-20240420155211115

image-20240420155223920

image-20240420155250897

开通成功后进入控制台,就长这样子

image-20240420155342252

2、创建Bucket

image-20240420155710185

image-20240420155840313

这样我们的Bucket就创建成功了

image-20240420172531906

二、SpringBoot整合并使用

阿里云JavaSDK开发者文档地址:https://help.aliyun.com/zh/oss/developer-reference/java/

基本的操作都有,咱们就不看了,直接开始干

image-20240420172815846

1、创建SpringBoot项目,导入依赖

创建过程省略,部分依赖省略

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>

    <!--        mybatis-plus依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.5</version>
    </dependency>
    <!--        模板依赖-->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.3</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>2.0.45</version>
    </dependency>

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

2、配置文件application.yml

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///aliyun-cloud-file-upload?characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
# mybatis-plus相关配置
mybatis-plus:
  type-aliases-package: com.cxs.model
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

aliyun:
  upload:
    # 访问ak
    accessKey: LTAI5tNYLsMBPVzUZ5WHHrqg
    # 访问sk
    secretKey: O2WBBkz9z1KAWvATjZeBascuo4SKyz
    # 你自己创建的空间名
    bucket: xiaobai-images
    # 表示在空间下穿件什么目录存储上传的图片
    mkdir: images/
    # 访问域名
    domain: https://xiaobai-images.oss-cn-beijing.aliyuncs.com/
    # 节点Endpoint,这是北京的
    endpoint: https://oss-cn-beijing.aliyuncs.com

AKSK获取位置说明

点击头像,AccessKey管理

image-20240420175236228

创建AccessKey

image-20240420175315719

创建成功后,记得复制,只会展示一遍

复制AKSK到配置文件中

注意:用你自己的,我的不能用

image-20240420175357032

domain、endpoint获取说明

注意:用你自己的,我的不能用

image-20240420180522705

3、主要接口

/*
 * @Project:cloud-file-upload
 * @Author:cxs
 * @Motto:放下杂念,只为迎接明天更好的自己
 * */
@RestController
@RequestMapping("/images")
public class FileController {

    @Autowired
    private ImagesService imagesService;

    /**
     * 文件上传
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    public BaseResult upload(MultipartFile file) throws IOException {
        BaseResult result = BaseResult.ok();
        imagesService.uploadImage(file, result);
        return result;
    }

    /**
     * 获取文件列表
     * @param dto
     * @param request
     * @return
     */
    @PostMapping("/getImagesList")
    public BaseResult getImagesList(@RequestBody BaseRequest dto, HttpServletRequest request){
        BaseResult result = BaseResult.ok();
        imagesService.getImagesList(dto, request, result);
        return result;
    }

    /**
     * 删除文件
     * @param id
     * @param request
     * @return
     */
    @DeleteMapping("/removeImages/{id}")
    public BaseResult removeImages(@PathVariable("id") Integer id, HttpServletRequest request){
        BaseResult result = BaseResult.ok();
        imagesService.removeImages(id, request, result);
        return result;
    }
}

4、文件上传的主要代码

public String imageUploadGetUrl(MultipartFile file, BaseResult result) {
    String url = null;
    // 获取文件的源文件名
    String originalFilename = file.getOriginalFilename();
    // 截取后缀
    String postFix = originalFilename.substring(originalFilename.lastIndexOf("."));
    // 生成新的文件名
    String fileNewName = UUID.randomUUID().toString().replace("-", "") + postFix;
    //  判断上传的文件后缀是否符合要求
    if (!Arrays.asList(arrImg).contains(postFix)) {
        result.setCode(-1).setMsg("上传失败,类型暂不支持");
        return null;
    }

    try {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey);
        String objectName = mkdir + fileNewName;
        // 创建PutObjectRequest对象。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, objectName, new ByteArrayInputStream(file.getBytes()));
        // 创建PutObject请求。
        PutObjectResult res = ossClient.putObject(putObjectRequest);
        result.setData(objectName);
        url = domain + objectName;
    } catch (Exception e) {
        log.error("", e);
        result.setCode(-1).setMsg("上传失败");
    }
    return url;
}

5、删除文件的主要代码

public void removeCloudImage(String key, BaseResult result) {
    try {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey);
        // 删除文件或目录。如果要删除目录,目录必须为空。
        ossClient.deleteObject(bucket, key);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

结语

1、完结撒花,制作不易,点赞、分享、在看再走吧,您的支持永远是我最大的动力!

2、完整代码案例获取:下方公众号名片

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

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

相关文章

一键生成数据库文档,从此告别人工整理文档

背景 在我们日常开发过程中&#xff0c;常常遇到项目需要出一个数据库文档&#xff0c;面对数据表众多的场景一个一个写显然不现实&#xff0c;于是 screw工具很好的满足了我们的需求&#xff0c;从此告别人工整理文档; screw工具它可以将整个数据库的表输出为数据库表结构文档…

【Java--数据结构】提升数据处理速度!深入理解Java中的顺序表机制

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 两种创建顺序表的方法及区别 认识ArrayList的构造方法 不带参数的构造方法 带参数的构造方法 利用Collection 构造方法 举例 ArrayList 常用方法演示 add addAll remo…

实战技巧:Android 14适配从挂号到出院

公众号「稀有猿诉」 原文链接 实战技巧&#xff1a;Android 14适配从挂号到出院 啥&#xff1f;这都4202年了&#xff0c;你的应用还没有升级到targetSDK 34&#xff1f;莫慌&#xff0c;本文就带着你全面的了解升级targetSDK 34的方法以及避坑指南。 注意&#xff0c;A…

基于SpringBoot+Vue网上商城系统的设计与实现

系统介绍 随着社会的不断进步与发展&#xff0c;人们经济水平也不断的提高&#xff0c;于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来&#xff0c;利用计算机网络来处理各行业事务这一概念更深入人心&#xff0c;由于用户工作繁忙的原因&#xff0c;去商…

《看漫画学C++》背后的故事1:艺术与科技的结合

引言&#xff1a; 在数字化浪潮中&#xff0c;艺术与科技的结合催生了无数创新。《看漫画学C》正是这一跨界合作的产物&#xff0c;它不仅是一本编程书籍&#xff0c;更是艺术与科技融合的典范。 一、相遇&#xff1a; 科技与艺术的火花作为一名专注于技术的软件程序员&…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为&#xff1a; Python函数的黑魔法&#xff1a;递归&#xff0c;嵌套函数与装饰器 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff…

五、e2studio VS STM32CubeIDE之汉化

目录 一、概述/目的 二、stm32cubeide汉化 2.1 在线下载安装汉化插件 2.2 直接安装汉化包(推荐) 三、e2studio STM32CubeIDE中英文切换 五、e2studio VS STM32CubeIDE之汉化 一、概述/目的 介绍stm32cubeide汉化方案和汉化包 e2studio自带汉化包&#xff0c;在安装过程中…

代理IP供应商的代理池大小怎么看?

代理池作为网络爬虫、数据采集和隐私保护等领域中的重要工具&#xff0c;扮演着连接真实网络和爬虫之间的桥梁。代理池的大小是影响其性能和可用性的关键因素之一。在这篇文章中&#xff0c;我们将深入探讨代理池的大小对业务的影响&#xff0c;并探讨在不同情况下如何选择合适…

AI-数学-高中-43常见函数的导数

原作者视频&#xff1a;【导数】【一数辞典】2常见函数的导数_哔哩哔哩_bilibili

OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】

说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import Url from ohos.url URLParams9 URLParams接口定义了一些处理URL查询字符串的实用方法。 constructor9 constructor(init?…

【注释和反射】类加载的过程

继上一篇博客【注释和反射】获取class类实例的方法-CSDN博客 目录 三、类加载的过程 例子 三、类加载的过程 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;类加载是一个将类的字节码文件从文件系统或其他来源加载到JVM的内存中&#xff0c;并将其转换为类或接口的…

SEW减速机参数查询 2-2 实践

首先说说结论&#xff1a;在不和SEW官方取得沟通之前&#xff0c;你几乎无法直接通过查阅SEW官方文档得到相关减速机的所有技术参数&#xff1a;比如轴的模数和齿数&#xff0c;轴承的参数。我在周一耗费了一个上午&#xff0c;最终和SEW方面确认后才知晓相关技术参数需要凭借销…

LeetCode 1052. 爱生气的书店老板

题目链接 https://leetcode.cn/problems/grumpy-bookstore-owner/description/?envTypedaily-question&envId2024-04-23 先把最初的满意人数累加算出来&#xff0c;然后使用滑动窗口来模拟连续 minutes分钟不生气&#xff0c;计算不生气minutes分钟最大的满意数 class S…

2010-2023年“国家级大数据综合试验区”试点城市DID匹配数据

2010-2023年国家级大数据综合试验区试点城市DID匹配数据 1、时间&#xff1a;2010-2023年 2、来源&#xff1a;国家发展改革委、工业和信息化部、ZY网信办发函批复的试验区 3、指标&#xff1a;行政区划代码、年份、所属省份、地区、国家级大数据综合试验区、最早设立年份 …

基于Google Gemini 探索大语言模型在医学领域应用评估和前景

概述 近年来&#xff0c;大规模语言模型&#xff08;LLM&#xff09;在理解和生成人类语言方面取得了显著的飞跃&#xff0c;这些进步不仅推动了语言学和计算机编程的发展&#xff0c;还为多个领域带来了创新的突破。特别是模型如GPT-3和PaLM&#xff0c;它们通过吸收海量文本…

面试遇到算法题:实现LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 这是一道大厂面试高频出现的算法题&#xff0c;难度为⭐️⭐️⭐️&#xff0c;属于中等&#xff0c;老铁们来一起看看这个题该怎么解&#xff1f; 1. 原题再现 没有废话&#xff0c;翠花&#xff0c;上酸菜&…

LeetCode:2385. 感染二叉树需要的总时间(DFS Java)

目录 2385. 感染二叉树需要的总时间 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 2385. 感染二叉树需要的总时间 题目描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第…

Simulink从0搭建模型03-Enabled Subsystem 使能子系统

参考博客 b站视频 【Simulink 0基础入门教程 P4 使能子系统 Enabled Subsystem 的使用介绍】 个人听了这个博主的视频风格觉得很适合我入门学习&#xff0c;讲得很清楚。 另外&#xff0c;视频里面教得很详细了&#xff0c;我也不会再详细写怎么打开创建等步骤&#xff0c;跟着…

QT中对于QPushButton样式的调整

文章目录 前言1.QPushButton1.1 新建项目导入资源1.2 添加Push Button并定义样式1.3 调整样式1.4 实际需求情况1.5 背景色和边框 2. 一些概念理解2.1 图片2.2 边距 总结 前言 前段时间在调软件的样式&#xff0c;学到了些新的东西&#xff0c;也碰到了些问题&#xff0c;这里做…

电脑遗失d3dx9_43.dll文件会给电脑带来什么问题,有哪些方法可以解决丢失d3dx9_43.dll文件的办法

电脑遗失了d3dx9_43.dll文件&#xff0c;可能会引发一系列麻烦的后果。那么&#xff0c;针对这种情况&#xff0c;我们应该采取哪些方法来修复丢失的d3dx9_43.dll文件呢&#xff1f;下面将介绍几种解决d3dx9_43.dll文件丢失问题的有效方法。 对d3dx9_43.dll文件的简要介绍 d3d…