阿里OSS使用指南!

在这里插入图片描述

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!

🌟了解 Lombok 请看: Lombok 入门到精通:告别冗余代码

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏已完结)】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning

官网介绍:阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。多种存储类型供选择,全面优化存储成本。

OSS主要存储的就是一些非结构化数据,如:图片、视频、日志文件等。
在这里插入图片描述

它的优势我就不一一介绍了,毕竟是阿里的,直接进入文章的主题吧。

准备工作

账号注册

访问官网 阿里云官网 进行账号注册,这里我就不演示了。

开通OSS服务

登录成功了之后,点击控制台,按照下面图片步骤
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
首次使用的话需要开通权限
在这里插入图片描述

创建 Bucket 存储空间

Bucket 就是用来存储文件的基本容器
在这里插入图片描述
其他默认即可
在这里插入图片描述

获取Bucket信息以及【Access密钥】

重点是:【Bucket名称】、 【Endpoint(地域节点)】、【 AccessKeyId】、【 AccessKeySecret】,务必要记住,后面配置的时候要用到。

  • 【Bucket名称】的获取
    在这里插入图片描述

  • 【Endpoint(地域节点)】的获取
    按照箭头的指向,点击完概述之后,往下滑,找到 Endpoint(地域节点)
    在这里插入图片描述

  • 【 AccessKeyId】、【 AccessKeySecret】的获取
    将鼠标移动到个人头像,然后点击 AccessKey
    在这里插入图片描述

点击创建 AccessKey
在这里插入图片描述
使用手机号验证通过后,请务必保存好【 AccessKeyId】、【 AccessKeySecret】(仅显示一次)
在这里插入图片描述

这四个属性获取完成之后,接下来就可以来使用了

初始化一个SpringBoot项目

初始化过程我就不演示了

在这里插入图片描述

项目创建完成之后,根据官方文档,引入依赖:
在这里插入图片描述

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.17.4</version>
</dependency>

使用 JDK 9以上的版本别忘记引入下面的依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

然后配置文件参数,还记得上面获取的四个重要的参数吗,填入你自己的即可
在这里插入图片描述

使用阿里OSS服务

1.创建一个配置类

用于绑定application.yml中的OSS配置属性。

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

2.创建OSS工具类

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;
import com.gewb.configuration.OssProperties;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;


import java.io.File;
import java.io.IOException;
import java.io.InputStream;

@Component
public class OssUtil {

    private OSS ossClient;
    private final OssProperties ossProperties;

    @Autowired
    public OssUtil(OssProperties ossProperties) {
        this.ossProperties = ossProperties;
    }

    @PostConstruct
    public void init() {
        // 初始化OSS客户端
        this.ossClient = new OSSClientBuilder().build(
                ossProperties.getEndpoint(),
                ossProperties.getAccessKeyId(),
                ossProperties.getAccessKeySecret()
        );
    }

    @PreDestroy
    public void destroy() {
        // 关闭客户端
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }

    // --- 核心方法 ---

    /**
     * 上传文件到OSS
     *
     * @param key    文件在OSS中的路径(例如:images/2023/test.jpg)
     * @param file   要上传的本地文件
     * @return 上传后的文件URL
     */
    public String uploadFile(String key, File file) {
        checkBucketExist();
        ossClient.putObject(new PutObjectRequest(ossProperties.getBucketName(), key, file));
        return getOssUrl(key);
    }

    /**
     * 通过输入流上传文件
     */
    public String uploadFile(String key, InputStream inputStream, long contentLength) {
        checkBucketExist();
        ossClient.putObject(ossProperties.getBucketName(), key, inputStream);
        return getOssUrl(key);
    }

    /**
     * 下载文件到本地
     */
    public void downloadFile(String key, File localFile) {
        checkBucketExist();
        OSSObject ossObject = ossClient.getObject(ossProperties.getBucketName(), key);
        try (InputStream inputStream = ossObject.getObjectContent()) {
            FileUtils.copyInputStreamToFile(inputStream, localFile);
        } catch (IOException e) {
            throw new RuntimeException("下载文件失败", e);
        }
    }

    /**
     * 删除OSS文件
     */
    public void deleteFile(String key) {
        checkBucketExist();
        ossClient.deleteObject(ossProperties.getBucketName(), key);
    }

    // --- 辅助方法 ---

    private void checkBucketExist() {
        if (StringUtils.isEmpty(ossProperties.getBucketName())) {
            throw new IllegalArgumentException("Bucket名称未配置");
        }
    }

    private String getOssUrl(String key) {
        return String.format("https://%s.%s/%s",
                ossProperties.getBucketName(),
                ossProperties.getEndpoint(),
                key);
    }

    // 异常处理示例(可按需扩展)
    private void handleOssException(OSSException e) {
        System.out.println("OSS错误码: " + e.getErrorCode());
        System.out.println("OSS错误信息: " + e.getMessage());
        throw new RuntimeException("OSS操作失败", e);
    }
}

3.代码测试

@SpringBootTest
public class SimpleOssTest {

    @Autowired
    private OssUtil ossUtil;

    @Test
    public void testUpload() {
        // 1. 创建测试文件路径
        File testFile = new File("E:\code_photos\test.jpeg"); // 替换为你的测试文件路径
        if (!testFile.exists()) {
            throw new RuntimeException("测试文件不存在,请检查路径!");
        }

        // 2. 上传文件到OSS
        String ossKey = "test/" + testFile.getName();
        String url = ossUtil.uploadFile(ossKey, testFile);
        System.out.println("上传后的URL:" + url);

        // 3. 验证结果(简单断言)
        assert url != null && !url.isEmpty() : "上传失败,URL为空";
        assert url.contains(ossKey) : "上传路径不匹配";
    }
}

可以看到已经上传成功了:

在这里插入图片描述

其他功能大同小异,可以使用工具类中的方法来测试。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值