OSS 工具类:支持静态方法 & Spring Bean?

发布于:2025-07-30 ⋅ 阅读:(18) ⋅ 点赞:(0)

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在实际项目中,我们经常需要与对象存储服务(OSS)进行交互,例如阿里云 OSS、腾讯云 COS 或 AWS S3。为了简化开发和增强代码的可重用性,创建一个通用的 OSS 工具类是一个很好的选择。该工具类可以通过静态方法或 Spring Bean 进行访问。

本文将演示如何实现一个 OSS 工具类,并支持两种方式的调用:静态方法和 Spring Bean。

1. 准备工作

在开始编写 OSS 工具类之前,你需要准备以下几项工作:

1.1 添加 OSS 依赖

在 Spring Boot 项目的 pom.xml 中,添加所需的 OSS 依赖。这里以 阿里云 OSS 为例,其他 OSS 服务的依赖类似。

<dependencies>
    <!-- 阿里云 OSS SDK -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.11.0</version>
    </dependency>
    <!-- Spring Boot 配置支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

1.2 配置阿里云 OSS 信息

application.ymlapplication.properties 中配置阿里云 OSS 的相关信息。

aliyun:
  oss:
    endpoint: oss-cn-hangzhou.aliyuncs.com
    access-key-id: your-access-key-id
    access-key-secret: your-access-key-secret
    bucket-name: your-bucket-name

2. OSS 工具类的实现

2.1 静态方法实现

我们首先实现一个静态方法版本的 OSS 工具类,提供常用的文件上传、下载、删除等功能。

示例:静态方法 OSS 工具类
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.DeleteObjectRequest;
import org.apache.commons.io.IOUtils;

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

public class OSSUtil {

    private static String endpoint = "your-endpoint";
    private static String accessKeyId = "your-access-key-id";
    private static String accessKeySecret = "your-access-key-secret";
    private static String bucketName = "your-bucket-name";

    private static OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    /**
     * 上传文件到 OSS
     *
     * @param file       本地文件
     * @param objectName OSS 中的目标文件名
     */
    public static void uploadFile(File file, String objectName) {
        try {
            ossClient.putObject(bucketName, objectName, file);
            System.out.println("File uploaded successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 下载文件
     *
     * @param objectName OSS 中的文件名
     * @return 文件输入流
     */
    public static InputStream downloadFile(String objectName) {
        try {
            return ossClient.getObject(bucketName, objectName).getObjectContent();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除文件
     *
     * @param objectName OSS 中的文件名
     */
    public static void deleteFile(String objectName) {
        try {
            ossClient.deleteObject(bucketName, objectName);
            System.out.println("File deleted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭 OSS 客户端
     */
    public static void shutdown() {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }
}
解释:
  • 通过 OSSClientBuilder 创建 OSS 客户端。
  • 提供了三个常用方法:uploadFiledownloadFiledeleteFile,分别用来上传文件、下载文件和删除文件。
  • 通过 ossClient.shutdown() 来关闭客户端。

2.2 Spring Bean 实现

在 Spring Boot 中,我们也可以将 OSS 工具类实现为一个 Spring Bean,使其能够被注入到其他类中,便于测试和管理。

示例:Spring Bean 实现的 OSS 工具类
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

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

@Component
public class OSSService {

    @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;

    private OSS ossClient;

    public OSSService() {
        this.ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 上传文件到 OSS
     *
     * @param file       本地文件
     * @param objectName OSS 中的目标文件名
     */
    public void uploadFile(File file, String objectName) {
        try {
            ossClient.putObject(bucketName, objectName, file);
            System.out.println("File uploaded successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 下载文件
     *
     * @param objectName OSS 中的文件名
     * @return 文件输入流
     */
    public InputStream downloadFile(String objectName) {
        try {
            return ossClient.getObject(bucketName, objectName).getObjectContent();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除文件
     *
     * @param objectName OSS 中的文件名
     */
    public void deleteFile(String objectName) {
        try {
            ossClient.deleteObject(bucketName, objectName);
            System.out.println("File deleted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭 OSS 客户端
     */
    public void shutdown() {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }
}
解释:
  • 在 Spring 中,我们通过 @Component 注解将 OSSService 声明为一个 Spring Bean。
  • 使用 @Value 注解来加载配置文件中的 OSS 配置信息。
  • 类的构造方法中初始化 OSS 客户端,之后可以通过 Spring 的依赖注入机制来使用这个 Bean。

2.3 使用 Spring Bean

在 Spring 中使用该 OSS 服务非常简单。你可以通过依赖注入来获取 OSSService 实例,并调用相应的方法。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;

@RestController
public class OSSController {

    @Autowired
    private OSSService ossService;

    @GetMapping("/upload")
    public String uploadFile() {
        File file = new File("/path/to/file");
        ossService.uploadFile(file, "file-name-on-oss");
        return "File uploaded!";
    }

    @GetMapping("/download")
    public String downloadFile() {
        InputStream inputStream = ossService.downloadFile("file-name-on-oss");
        // Process the file
        return "File downloaded!";
    }

    @GetMapping("/delete")
    public String deleteFile() {
        ossService.deleteFile("file-name-on-oss");
        return "File deleted!";
    }
}
解释:
  • @Autowired 注解用于自动注入 OSSService 实例。
  • uploadFiledownloadFiledeleteFile 方法分别用于处理上传、下载和删除文件的操作。

3. 总结

通过本篇文章,你已经学习了如何实现一个既支持静态方法调用,也支持 Spring Bean 注入的 OSS 工具类。你可以根据项目的需求选择适合的方式来使用 OSS 服务。

关键点总结:

  1. 静态方法方式:提供了简单的接口调用方式,适用于不依赖 Spring 容器的应用。
  2. Spring Bean 方式:将工具类封装为 Spring Bean,便于管理和注入,适用于 Spring 项目。
  3. OSS 操作:提供了常见的文件上传、下载和删除功能。

通过这些方式,你可以在项目中轻松集成和使用阿里云 OSS 或其他对象存储服务,提高文件存储与管理的效率。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!


网站公告

今日签到

点亮在社区的每一天
去签到