Springboot集成Oss

从阿里云获取OSS的信息

在这里插入图片描述

引入Maven依赖

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

Oss属性配置类

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author zyq
 * @Description Oss配置类 实现InitializingBean接口 spring加载时会初始化静态变量
 * @createTime 2021年01月22日 16:47:00
 */
@Component
@Slf4j
public class OssProperties implements InitializingBean {

    @Value("${oss.end-point}")
    private String endPoint;

    @Value("${oss.bucket-name}")
    private String bucketName;

    @Value("${oss.access-key-secret}")
    private String accessKeySecret;

    @Value("${oss.access-key-id}")
    private String accessKeyId;

    /**
     * 定义静态变量并初始化
     */
    public static String ePoint;

    public static String bName;

    public static String secret;

    public static String keyId;

    @Override
    public void afterPropertiesSet() {
        ePoint = this.endPoint;
        bName = this.bucketName;
        secret = this.accessKeySecret;
        keyId = this.accessKeyId;
    }
}

上传文件大小限制配置

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

/**
 * @author zyq
 * @Description 配置上传文件的最大值
 * @createTime 2021年01月22日 17:33:00
 */
@Configuration
public class OssConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大值 48MB 默认10MB
        factory.setMaxFileSize(DataSize.ofMegabytes(48));
        // 设置总上传数据总大小 96MB 默认10MB
        factory.setMaxRequestSize(DataSize.ofMegabytes(96));
        return factory.createMultipartConfig();
    }

}

服务层

import org.springframework.web.multipart.MultipartFile;

/**
 * @author zyq
 * @Description
 * @createTime 2021年01月22日 17:08:00
 */
public interface OssService {

    /**
     * 上传文件到OSS服务器并返回URL
     * @param file
     * @return
     */
    String uploadFile(MultipartFile file);

}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.guli.common_util.ApiException;
import com.guli.service_oss.config.OssProperties;
import com.guli.service_oss.service.OssService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author zyq
 * @Description
 * @createTime 2021年01月22日 17:10:00
 */
@Service
@Slf4j
public class OssServiceImpl implements OssService {

    @Override
    public String uploadFile(MultipartFile file) {
        InputStream inputStream = null;
        OSS ossClient = null;
        try {
            // 1.获取上传文件的输入流
            inputStream = file.getInputStream();
            // 2.获取文件名称
            String filename = file.getOriginalFilename();

            // 3.在文件名称里面添加随机唯一的值
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            filename = uuid + filename;

            // 4.创建一个与OSS服务器的链接
            ossClient = new OSSClientBuilder().build(OssProperties.ePoint, OssProperties.keyId, OssProperties.secret);

            // 5.调用oss方法实现上传(Bucket名称,传到oss文件路径和文件名称,上传文件输入流)
            ossClient.putObject(OssProperties.bName, filename, inputStream);

            // 6.返回访问文件的地址
            return "https://" + OssProperties.bName+"."+ OssProperties.ePoint +"/" + filename;
        } catch (IOException e) {
            log.error("【文件上传失败】:{}", e.getMessage());
            throw new ApiException("上传文件失败");
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("【关闭文件流失败】");
                }
            }
        }
    }


}

控制层

import com.guli.common_util.R;
import com.guli.service_oss.service.OssService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author zyq
 * @Description
 * @createTime 2021年01月22日 16:54:00
 */
@Api(tags = "文件模块")
@RestController
public class OssController {


    private final OssService ossService;

    public OssController(OssService ossService) {
        this.ossService = ossService;
    }

    @ApiOperation("上传文件")
    @PostMapping("/upload")
    public R uploadFile(MultipartFile file){
        return R.ok().data("url", ossService.uploadFile(file));
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

it00zyq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值