Springboot集成阿里云OSS上传文件系统教程

 更新时间:2021年06月28日 15:50:49   作者:sjgeng111  
这篇文章主要介绍了Springboot集成阿里云OSS上传文件系统教程,通过详细的图文展示,代码步骤的展示和文件配置信息,希望对你有所帮助

第一步:开通阿里云OSS服务,创建Bucket,获取id和密钥

在这里插入图片描述

在这里插入图片描述

第二步:根据官方文档编写上传代码

在这里插入图片描述

1.新建maven项目
添加依赖:

<!-- 阿里云oss依赖 -->
 <dependency>
 <groupId>com.aliyun.oss</groupId>
 <artifactId>aliyun-sdk-oss</artifactId>
 </dependency>
 <!-- 日期工具栏依赖 -->
 <dependency>
 <groupId>joda-time</groupId>
 <artifactId>joda-time</artifactId>
 </dependency>

2.配置application.properties

#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev

#阿里云 OSS
#不同的服务器,地址不同  需要根据自己的信息填写
aliyun.oss.file.endpoint=your endpoint
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=guli-file

3、创建启动类

创建OssApplication.java

package com.sun.oss;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"com.sun"})
public class OssApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssApplication.class, args);
    }
}

启动报错:

在这里插入图片描述

多模块应用时,该模块没有使用数据库,配置文件中没有数据库配置信息,则会报错
第一种方法:
在配置类中添加数据库配置信息:

# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/musicdb?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

第二种方法:添加注解,在@SpringBootApplication注解上加上exclude,解除自动加载DataSourceAutoConfiguration

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

4.编写一个工具类:
用于读取配置文件密钥信息
ConstantPropertiesUtils.java

//当项目已启动,spring接口,spring加载之后,执行接口一个方法
@Component
public class ConstantPropertiesUtils implements InitializingBean {

    //读取配置文件内容
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.file.keyid}")
    private String keyId;

    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;

    @Value("${aliyun.oss.file.bucketname}")
    private String bucketName;

    //定义公开静态常量
    public static String END_POIND;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POIND = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

5.编写controller类

@Api(description = "头像上传到oss")
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin//解决跨域问题
public class OssController {

    @Autowired
    private OssService ossService;

    //上传头像的方法
    @ApiOperation("上传头像")
    @PostMapping
    public R uploadOssFile(MultipartFile file) {
        //获取上传文件  MultipartFile
        //返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url",url);
    }
}

6.编写service类

@Service
public class OssServiceImpl implements OssService {
    //上传头像
    @Override
    public String uploadFileAvatar(MultipartFile file) {
        //工具类获取值
        String endPoind = ConstantPropertiesUtils.END_POIND;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
        try {
            //创建Oss实例
            OSS ossClient = new OSSClientBuilder().build(endPoind, accessKeyId, accessKeySecret);

            //获取上传文件输入流
            InputStream inputStream = file.getInputStream();
            //获取文件名称
            String filename = file.getOriginalFilename();

            //1.防止上传文件名重复,使用UUid
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            //拼接fileName
            filename=uuid+filename;

            //2.把文件按照日期分类
            //获取当前日期,需要引入org.joda.time依赖
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //拼接
            filename=datePath+"/"+filename;

            //调用oss方法实现上传
            //第一个参数 Bucket名称
            //第二个参数 上传到oss的文件路径和文件名
            //第三个参数 上传文件输入流
            ossClient.putObject(bucketName,filename,inputStream);

            //关闭OssClient
            ossClient.shutdown();

            //上传之后把文件路劲返回
            //需要把上传到oss路径手动拼接出来
            //https://edu-975.oss-cn-beijing.aliyuncs.com/07aef13af7ea82703f3eb320c3f577ec.jpg
            String url="https://"+bucketName+"."+endPoind+"/"+filename;
            return url;


        }catch (Exception e){
            e.printStackTrace();
            return null;
        }

    }
}

解决上传文件大小:

# 单个文件大小
spring.servlet.multipart.max-request-size=10MB
# 单次最大文件
spring.servlet.multipart.max-file-size=3MB

swagger测试运行:

在这里插入图片描述

在这里插入图片描述

成功!!

到此这篇关于Springboot集成阿里云OSS上传文件系统教程的文章就介绍到这了,更多相关Springboot集成阿里云oss文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • @JsonFormat处理LocalDateTime失效的问题

    @JsonFormat处理LocalDateTime失效的问题

    这篇文章主要介绍了关于@JsonFormat处理LocalDateTime失效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java实现马踏棋盘算法

    Java实现马踏棋盘算法

    这篇文章主要为大家详细介绍了Java实现马踏棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • java队列之queue用法实例分析

    java队列之queue用法实例分析

    这篇文章主要介绍了java队列之queue用法实例分析,Queue 队列就是一个先入先出(FIFO)的数据结构,Queue接口继承Collection接口。感兴趣的可以了解一下
    2020-07-07
  • Java使用itextpdf实现生成PDF并添加图片,水印和文字

    Java使用itextpdf实现生成PDF并添加图片,水印和文字

    这篇文章主要为大家详细介绍了Java在使用itextpdf实现生成PDF时如何实现添加图片,水印和文字等效果,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • Spring 项目常用pom文件的依赖

    Spring 项目常用pom文件的依赖

    这篇文章主要介绍了Spring 项目常用pom文件的依赖,文中给大家提到了Spring boot starter pom的依赖关系说明,需要的朋友参考下吧
    2018-03-03
  • spring boot打包成可执行jar包

    spring boot打包成可执行jar包

    本篇文章主要介绍了spring boot打包成可执行jar包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 浅谈Java实现回溯算法之八皇后问题

    浅谈Java实现回溯算法之八皇后问题

    八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例。今天我们就一起来探究一下吧
    2021-06-06
  • Spring中利用SchedulingConfigurer实现动态定时任务配置的示例

    Spring中利用SchedulingConfigurer实现动态定时任务配置的示例

    定时任务是一项至关重要的功能,它们使得我们能够按照预定的时间执行特定的任务,本文主要介绍了Spring中利用SchedulingConfigurer实现动态定时任务配置的示例,感兴趣的可以了解一下
    2024-05-05
  • IDEA进程已结束,退出代码-1073741819 (0xC0000005)的bug

    IDEA进程已结束,退出代码-1073741819 (0xC0000005)的bug

    这篇文章主要介绍了IDEA进程已结束,退出代码-1073741819 (0xC0000005)的bug,本文通过实例代码图文的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 深入讲解Java Maven配置

    深入讲解Java Maven配置

    这篇文章主要介绍了Maven的安装配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10

最新评论