SpringBoot接入阿里OSS

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 大家平时在需要项目需要上传下载文件的时候都是怎么解决的呢,是把项目当文件服务器,还是说使用到了市面上的第三方存储服务呢?
大家平时在需要项目需要上传下载文件的时候都是怎么解决的呢,是把项目当文件服务器,还是说使用到了市面上的第三方存储服务呢?

今天我就一起来给大家介绍一下我的实现方案,我是使用的阿里的OSS对象存储服务,这个用起来还是很方便的,不错这个是收费的,但是是根据存储空间和流量计费的,相对来说还是比较不错的,最起码接入对象存储服务还是挺简单的。

接下来,我就使用SpringBoot的方法带大家接入OSS服务,在此之前,你需要在阿里云对象存储创建密钥,这个就不介绍的,挺简单的,不会的可以网上搜一下,非常简单,这里就不过多啰嗦了,直接进入正题。

1.引入阿里OSS依赖
<!-- oss -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>
2.yml配置密钥
###############################################
######################oss######################
###############################################
aliyun:
  oss:
    file:
      endpoint: oss-cn-hangzhou.aliyuncs.com
      keyid: xxxxxx
      keysecret: xxxxxx
      bucketname: oss
3.创建一个OSS配置类

这个是为了映射配置文件中的参数的,当然不建这个类直接写在方法里也是可以的,这里仅供参考。

package cn.youhaveme.config;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class OssConfig 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_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}
4.OSS Service

这里才是直接与OSS对象存储服务对接的一些东西,其实这么来说吧,有了官方的OSS开发包后,这一切都是那么的简单的,只需要调用就行了,也不用自己再去写什么其他东西了,直接使用就行了。

package cn.youhaveme.service.impl;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.youhaveme.config.OssConfig;
import cn.youhaveme.service.OssService;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@Slf4j
@Service("ossService")
public class OssServiceImpl implements OssService {

    @Override
    public String uploadImage(MultipartFile file) {
        String endpoint = OssConfig.END_POINT;
        String accessKeyId = OssConfig.ACCESS_KEY_ID;
        String accessKeySecret = OssConfig.ACCESS_KEY_SECRET;
        String bucketName = OssConfig.BUCKET_NAME;
        try {
            //创建oss实例
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //获取上传文件的输入流
            InputStream fileInputStream = file.getInputStream();
            //获取原文件名
            String filename = file.getOriginalFilename();
            if (StrUtil.isBlank(filename)) {
                return null;
            }
            String currentTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
            filename = currentTime + filename;
            //上传到指定目录的指定文件
            filename = "oss/upload/" + filename;
            /*
             * 调用OSS实现文件的上传
             * 第一个参数:Bucket名称
             * 第二个参数:上传到oss的指定路径和文件名称, oss/image/xx.png
             * 第三个参数:上传文件输入流
             */
            ossClient.putObject(bucketName, filename, fileInputStream);
            //关闭OSSClient
            ossClient.shutdown();
            //返回上传到OSS的文件的URL,这里使用自定义域名,因此自己手动拼接路径
            return "https://oss域名前缀/" + filename;

        } catch (Exception e) {
            log.error("文件上传失败", e);
            return null;
        }
    }
}
5.Controller调用

这里前端直接通过文件流的方式调用,OSS服务经过处理返回前台一个oss地址,前台在把这个地址不管是渲染到页面还是存储啊都是非常方便的。

package cn.youhaveme.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.youhaveme.service.OssService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/file")
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class OssController {

    @Autowired
    private OssService ossService;

    @SaCheckLogin
    @RequestMapping("/upload")
    public String uploadImage(MultipartFile file) {
        if (file == null) {
            return "";
        }
        String uploadImage = ossService.uploadImage(file);
        log.info("uploadImage:{}", uploadImage);
        return uploadImage;
    }
}

到这里,SpringBoot接入OSS就已经结尾了,别的不说,就单纯这个接入还是挺简单的,基本上毫无难度而言。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
4月前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
2000 4
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
4月前
|
SQL druid Java
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
789 0
|
2月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
171 6
|
1月前
|
Java 数据安全/隐私保护 Docker
SpringBoot Docker 发布到 阿里仓库
SpringBoot Docker 发布到 阿里仓库
33 0
|
2月前
|
缓存 Java 对象存储
配置自己的 阿里OSS 环境,但在引入自己创建的依赖时出现报错。
配置自己的 阿里OSS 环境,但在引入自己创建的依赖时出现报错。
|
4月前
|
弹性计算 监控 Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中调用zip-oss-fc函数返回时候出现错误代码如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
Serverless 应用引擎操作报错合集之阿里函数计算中调用zip-oss-fc函数返回时候出现错误代码如何解决
|
11月前
|
Java 对象存储
【工具类】使用阿里oss实现图片、视频、文档上传
【工具类】使用阿里oss实现图片、视频、文档上传
385 0
|
4月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
4月前
|
开发框架 架构师 Java
Java程序员不掌握SpringBoot怎么进大厂,阿里架构师推荐实战文档
Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起时,还未得到普及使用。
|
10月前
|
缓存 监控 架构师
价值32k!阿里顶级架构师深度解析SpringBoot进阶原理实战手册
在当下的互联网应用中,业务体系日益复杂,业务功能也在不断地变化。以典型的电商类应用为例,其背后的业务功能复杂度以及快速迭代要求的开发速度,与5年前的同类业务系统相比,面临着诸多新的挑战。这些挑战中核心的一点就是快速高效地实现系统功能,同时保证代码持续可维护,这是一个非常现实且亟待解决的问题。