阿里云OSS对象存储功能的实现步骤 + 配置文件的编写

不知名男玩家 / 2024-07-13 / 原文

阿里云OSS对象存储功能的实现步骤

首先 -> 注册阿里云 -> 开通OSS对象存储服务 -> 创建Bucket -> 创建AccessKey 

  1. 获取四个参数编写到yml文件  参考配置文件1.

aliyun:
  oss:
    endpoint: https://oss-cn-hangzhou.aliyuncs.com
    access-key-id: LTAI5tS9qa9H2uftNY
    access-key-secret: VNEIKZfxBpa4HO9YLDx2i
    bucket-name: big-event993

  2. 编写配置类

AliyunOssConfig
 package com.zxd.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @Auther: Zxd
 * @Date: 2024/07/12  20:58
 * @Description:
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssConfig {

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

}

  3. 编写Oss工具类

AliOssUtil
 package com.zxd.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.zxd.config.AliyunOssConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.InputStream;

/**
 * @Auther: Zxd
 * @Date: 2024/07/12  14:47
 * @Description: 阿里云oss工具类
 */
@Component
public class AliOssUtil {

    @Autowired
    private  AliyunOssConfig aliyunOssConfig;

    public String uploadFile(String objectName, InputStream in) throws Exception {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
        String url = "";
        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(aliyunOssConfig.getBucketName(), objectName, in);

            // 上传文件。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            System.out.println("result:" + result);
            // url组成: https://bucket名称.区域节点/objectName
            url = "https://" + aliyunOssConfig.getBucketName() + "." + aliyunOssConfig.getEndpoint().substring(aliyunOssConfig.getEndpoint().lastIndexOf("/") + 1) + "/" + objectName;
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }
}

  4. 图片上传controller层示例

FileUploadController
 package com.zxd.controller;

import com.zxd.pojo.ApiResult;
import com.zxd.utils.AliOssUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

/**
 * @Auther: Zxd
 * @Date: 2024/07/12  10:15
 * @Description:
 */

@RestController
@Tag(name = "文件上传")
public class FileUploadController {

    @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/upload")
    @Operation(summary = "图片上传")
    public ApiResult<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
        //把文件内容存储到本地磁盘上
        String originalFilename = file.getOriginalFilename();
        //保证文件名唯一性,从而防止文件覆盖     originalFilename.lastIndexOf(".") -> 找到文件名中最后一个"."的位置
        //                                  originalFilename.substring -> 从这个位置开始截取,得到文件的扩展名
        String fileName = UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));
        //调用工具类上传到阿里云并返回url地址
        String url = aliOssUtil.uploadFile(fileName, file.getInputStream());
        return ApiResult.success(url);
    }

}

 

参考链接:https://www.bilibili.com/video/BV14z4y1N7pg?p=36&vd_source=714b8a2323b700f15d0b7b31226f1d5d 

 

配置文件的编写

1. 在application.yml里面配置需要的参数

2. pom.xml文件引入配置文件依赖  不然 @ConfigurationProperties(prefix = "aliyun.oss") 会报红不生效

        <!-- 配置生成配置文件处理器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

3. 使用配置文件里面的信息

  方法一:适用于参数多  使用实体类和 @Autowired 引入配置类参数

      1)编写config类:注意 @ConfigurationProperties(prefix = "aliyun.oss")   要与第一步yml文件里面的路径匹配

        2)使用@Autowired注解,哪里需要就注入引用

  方法二:适用于参数少直接使用 @Value("${aliyun.oss.endpoint}") 引入配置类参数(需要注意路径)