自定义阿里云OSS上传文件的start依赖

这篇具有很好参考价值的文章主要介绍了自定义阿里云OSS上传文件的start依赖。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:SpringBoot项目之所以开发起来很方便,是因为SpringBoot项目在启动时自动为我们装配了很多Bean对象(参考:http://t.csdn.cn/MddMO),这取决于我们是否在pom.xml文件添加对应的依赖,称为起步依赖。

我们自己也可以自定义实现一个起步依赖,让后面创建的模块,只要引用了该模块,就可以自动调用该依赖所属的Bean对象,实现对应的功能。这里我以阿里云OSS上传文件功能为例,自定义一个该功能的依赖(阿里云OSS使用参考:http://t.csdn.cn/WCDZt)。

【第一步】新建自动配置模块

创建一个oss-essay-spring-boot-autoconfigure模块,该模板内仅放完成阿里云OSS上传的所有依赖,不编写一行代码

    <!--表明该项目为SpringBoot项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!--springboot web项目依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--阿里云OSS依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>

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

        <!--一键生成domain set、get、toString依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--消除报错依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
    </dependencies>

【第二步】创建起步依赖模块

创建一个oss-essay-spring-boot-start模块,该模块引用自动配置(oss-spring-boot-autoconfigure)依赖,利用该模块内的依赖实现阿里云OSS上传的任务代码

    <!--引入自动装配模块-->
    <dependencies>
        <dependency>
            <groupId>com.essay</groupId>
            <artifactId>oss-essay-spring-boot-autoconfigure</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

实现OSS上传,需要以下三个类:

OssProperties类

该类里面存放实现OSS上需要的传配置属性(四个),并添加以下三个注解

@Data:给属性增加setter()、getter()、toString()方法

@Component:将该类加入到IOC容器中

@ConfigurationProperties(prefix = “aliyun.oss”):指定用户使用时,该配置来自于用户配置文件哪个配置

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

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

OssTemplate类

该类为具体实现OSS上传的类,首先为了实现OSS上传,需要OssProperties类中的信息,

因此,该类中除了OSS上传的功能代码,还需要定义一个OssProperties类对象,该类对象的实例来自用户的配置,所以需要设置一个setOssProperties的方法

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;


/**
 * OSS功能实现类
 */
public class OssTemplate {

    private OssProperties ossProperties;

    public void setOssProperties(OssProperties ossProperties) {
        this.ossProperties=ossProperties;
    }

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        String date = sdf.format(new Date());

        // 上传到OSS Bucket下面的image文件夹内
        fileName =  "image"+ "/" + date + "/" + fileName;

        // 上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret());
        ossClient.putObject(ossProperties.getBucketName(), fileName, inputStream);

        // 文件访问路径
        String url = ossProperties.getEndpoint().split("//")[0] + "//" + ossProperties.getBucketName() + "." + ossProperties.getEndpoint().split("//")[1] + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();

        // 把上传到oss的路径返回
        System.out.println(url);

        return url;
    }
}

OssAutoConfiguration类

该类的任务是自动装配Bean(OssTemplate),所以需要加@Configuration注解,

因为OssTemplate类的使用,需要用户OSS的配置(OssProperties类对象),所以还需要加一个@EnableConfigurationProperties()注解,括号内填OssProperties.class

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * OSS自动配置类
 */
@Configuration
@EnableConfigurationProperties(OssProperties.class)
public class OssAutoConfiguration {

    /**
     * 手动放入OssTemplate模板工具类
     * @param ossProperties
     * @return
     */
    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties){
        // 创建Template对象
        OssTemplate ossTemplate = new OssTemplate();

        // 设置该Template对象的OSS配置
        ossTemplate.setOssProperties(ossProperties);
        return ossTemplate;
    }
}

最后

OssAutoConfiguration类作为自动装配类,它的全类名要存在该模块的本地资源中(META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports)

可以从Spring的依赖中,复制一份过来,把不需要的文件删掉

自定义阿里云OSS上传文件的start依赖


(复制,删除不需要的文件)

自定义阿里云OSS上传文件的start依赖


(org.springframework.boot.autoconfigure.AutoConfiguration.imports)

自定义阿里云OSS上传文件的start依赖

至此,自定义start依赖的任务就完成了。

【第三步】创建Demo模块测试

新建Demo

在新建的模块中,直接引入oss-spring-boot-start模块。因为OSS功能是在SpringBoot项目环境中使用的,所以需要parent标签中加入SpringBoot引用,使该项目成为一个SpringBoot项目。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.essay</groupId>
    <artifactId>oss-essay-spring-boot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <!--SpringBoot项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <relativePath/>
    </parent>
    
    <!--引入我们自定义的OSS起步依赖-->
    <dependencies>
        <dependency>
            <groupId>com.essay</groupId>
            <artifactId>oss-essay-spring-boot-start</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
import aliyun.oss.OssTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
public class UploadController {

    /**
     * 因为自定义了起步依赖,所以可以直接自动装配
     */
    @Autowired
    private OssTemplate ossTemplate;

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        
        String url = ossTemplate.upload(file);

        return url;
    }
}

创建配置文件

再创建一个application.yml文件,里面关于OSS的配置信息要与@ConfigurationProperties(prefix = “aliyun.oss”)中的一样,才能读取到,之后正常测试即可。

自定义阿里云OSS上传文件的start依赖


使用postman测试

我这里以桌面上的这张图片为例

自定义阿里云OSS上传文件的start依赖


测试结果:

自定义阿里云OSS上传文件的start依赖

总结

通过自定义起步依赖,可以自己感受一下SpringBoot在底层帮助我们做的自动装配流程,同时也加深了对SpringBoot底层的理解。文章来源地址https://www.toymoban.com/news/detail-491577.html

到了这里,关于自定义阿里云OSS上传文件的start依赖的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot整合阿里云oss实现文件上传

    通过阿里云oss进行文件上传,首先需要开通相关的服务,这边就不在具体说明,不懂的可以百度看一下。 阿里云oss有几个关键的参数,这也是后续通过java进行上传所需要的参数,分别是endpoint(域结点)、AccessKey ID(秘钥id)、AccessKey secret(秘钥)、bucket name(bucket域名)。  通过这几

    2024年01月25日
    浏览(48)
  • SpringCloud整合阿里云OSS实现文件上传

    阿里云OSS官网:OSS管理控制台 (aliyun.com) 什么是对象存储OSS 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。 OSS具有与平台无

    2023年04月13日
    浏览(47)
  • SpringBoot整合阿里云Oss实现文件图片上传

    目录 1. 阿里云Oss注册使用 2. 项目中使用 2.1 引入依赖以及插件 2.2 编写配置文件application.properties 2.3 创建常量类,获取配置信息  2.4 serviceImpl中实现逻辑            

    2024年02月08日
    浏览(68)
  • 【案例实战】SpringBoot整合阿里云文件上传OSS

    1.需求背景 C端业务用户头像上传 海量图片音频、视频存储 用户行为日志存储 (1)阿里云OSS介绍 对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务设计可用性不低于99.995%。 OSS具

    2024年02月06日
    浏览(56)
  • 微信小程序文件直接上传阿里云OSS

    第一步 配置Bucket跨域访问 第二步 微信小程序配置域名白名单 以上两步,请参考阿里云官网, 如何在微信小程序环境下将文件上传到OSS_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/92883.html 安装依赖 wx-oss-upload 然后创建自己的上传方法,引用 wx-oss-upload  然后在选取文

    2024年02月11日
    浏览(53)
  • vue+iviewUi+oss直传阿里云上传文件

    用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss,轻量型的应用可以直接将文件资源上传到服务器就行。废话不多说,下面开始总结本人上传到oss的踩坑之旅。 1、第一

    2024年02月13日
    浏览(48)
  • node.js - 上传文件至阿里云oss

    deploy.js

    2024年02月08日
    浏览(43)
  • java使用阿里云OSS实现文件上传到云盘

    一、进入阿里云官网的OSS管理控制台并注册账号 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 欢迎登录阿里云,全球领先的云计算及人工智能科技公司,阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安

    2024年01月17日
    浏览(56)
  • SpringBoot对接阿里云OSS上传文件以及回调(有坑)

    今天在对接阿里云OSS对象存储, 把这过程记录下来 阿里云的内容很多,文档是真的难找又难懂 本文主要是用的PostObject API 加上 Callback参数 PostObject - https://help.aliyun.com/document_detail/31988.html?spm=a2c4g.31989.0.0 Callback - https://help.aliyun.com/document_detail/31989.html?spm=a2c4g.31988.0.0 前端向后

    2024年02月11日
    浏览(60)
  • vue项目中上传文件到阿里云oss方法

    在项目需求中,关于图片、视频、文件等上传文件,一般不是直接放置在自己的后台服务器上,一般都会购买云服务进行存储。譬如阿里云的oss对象存储。 那么,前端开发项目中,涉及到上传的功能时,我们不是把文件上传到自己的后台服务器,而是阿里云上面去,然后拿到

    2024年02月06日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包