Skip to content

OSS ​

先引入依赖

xml
		<!-- 阿里云 OSS -->
       <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.18.1</version>
        </dependency>

先在application.yaml里面配置

yaml
oss:
  endpoint: oss-cn-beijing.aliyuncs.com
  access-key-id:
  access-key-secret:
  bucket-name: java-demo-hsh
  url-prefix: https://java-demo-hsh.oss-cn-beijing.aliyuncs.com/

再配置

java
package com.demo.sessiondemo.config;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import jakarta.validation.Valid;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "oss")
public class OssConfig {
    @Value("${oss.endpoint}")
    private String endpoint;
    @Value("${oss.access-key-id}")
    private String accessKeyId;
    @Value("${oss.access-key-secret}")
    private String accessKeySecret;
    @Value("${oss.bucket-name}")
    private String bucketName;
    @Value("${oss.url-prefix}")
    private String urlPrefix;

    @Bean
    public OSS ossClient() {
        // 客户端是线程安全的 做成单例Bean复用
        return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }
}

这里直接写实现类

java
package com.demo.sessiondemo.service.impl;

import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import com.aliyun.oss.OSS;
import com.demo.sessiondemo.config.OssConfig;
import com.demo.sessiondemo.exception.BusinessException;
import com.demo.sessiondemo.service.OssService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Service
@RequiredArgsConstructor
public class OssServiceImpl implements OssService {

    private final OSS ossClient;
    private final OssConfig ossConfig;
    @Override
    public String uploadFile(MultipartFile file) {
        if (file == null || file.isEmpty()) {
            throw new BusinessException("文件不能为空");
        }

        // 生成对象key uuid文件名 避免同名覆盖
        String originalFilename = file.getOriginalFilename();
        String ext = StrUtil.subAfter(originalFilename, ".", true); // 取扩展名
        String key = UUID.randomUUID() + (StrUtil.isNotBlank(ext) ? "." + ext : "");

        // 上传到OSS
        try {
            ossClient.putObject(ossConfig.getBucketName(), key, file.getInputStream());
        } catch (IOException e) {
            throw new BusinessException("文件上传失败");
        }
        // 返回完整URL给前端用
        return ossConfig.getUrlPrefix() + key;
    }
}