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

唠嗑部分

各位小伙伴大家好,我是全栈小白,之前我们分享了一期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、完整代码案例获取:下方公众号名片

相关推荐

  1. SpringBoot实战】基于阿里实现文件

    2024-04-25 13:42:02       66 阅读
  2. SpringBoot】文件阿里

    2024-04-25 13:42:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 13:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 13:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 13:42:02       82 阅读
  4. Python语言-面向对象

    2024-04-25 13:42:02       91 阅读

热门阅读

  1. Ribbon饥饿加载

    2024-04-25 13:42:02       42 阅读
  2. C语言如何⽤指针为函数传递数组?

    2024-04-25 13:42:02       33 阅读
  3. 答疑(蓝桥杯)

    2024-04-25 13:42:02       37 阅读
  4. 【校招VIP】25届一本备战策略

    2024-04-25 13:42:02       34 阅读
  5. Source Insight 4.0

    2024-04-25 13:42:02       152 阅读
  6. 汽车诊断仪算法保护芯片——LKT4305-GM

    2024-04-25 13:42:02       100 阅读
  7. MySQL数据库SSL连接测试

    2024-04-25 13:42:02       33 阅读
  8. 第28章 招聘

    2024-04-25 13:42:02       32 阅读
  9. leetcode145--二叉树的后序遍历

    2024-04-25 13:42:02       38 阅读
  10. excel函数公式

    2024-04-25 13:42:02       33 阅读
  11. 【数据结构】霍夫曼树

    2024-04-25 13:42:02       38 阅读
  12. 代码质量与自动化:ESLint & Prettier配置与使用

    2024-04-25 13:42:02       34 阅读