SpringBoot集成-阿里云对象存储OSS

文章目录

  • [阿里云 OSS 介绍](#阿里云 OSS 介绍)
  • 准备工作
  • [SpringBoot 集成 OSS](#SpringBoot 集成 OSS)

阿里云 OSS 介绍

阿里云对象存储 OSS (Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS,你可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。

准备工作


  1. 登录阿里云后进入阿里云控制台首页选择 对象存储 OSS 服务
  1. 开通服务

  2. 创建Bucket

填写 bucket 名称 & 选存储空间归属的地域 & 选择读写权限为(公共读

  1. 获取密钥

创建 AccessKey

保存 AccessKey ID 和 AccessKey Secret

SpringBoot 集成 OSS

可以参考 官网 SDK 文档

  1. 导入 maven 坐标
xml 复制代码
<dependency>
	<groupId>com.aliyun.oss</groupId>
	<artifactId>aliyun-sdk-oss</artifactId>
	<version>${aliyun.sdk.oss}</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>${jaxb-api}</version>
</dependency>

如果是 Java 9 及以上版本,还需要导入其他坐标

  1. 在 yml 中添加配置

对应的配置类

  1. 编写 AliOssUtil
java 复制代码
@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

    /**
     * 文件上传
     *
     * @param bytes
     * @param objectName
     * @return
     */
    public String upload(byte[] bytes, String objectName) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

        //文件访问路径规则 https://BucketName.Endpoint/ObjectName
        StringBuilder stringBuilder = new StringBuilder("https://");
        stringBuilder
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/")
                .append(objectName);

        log.info("文件上传到:{}", stringBuilder.toString());

        return stringBuilder.toString();
    }
}
  1. 配置 OSS Configuration
java 复制代码
/**
 * 配置类,用于创建AliOssUtil对象
 */
@Configuration
@Slf4j
public class OssConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){

        log.info("开始创建阿里云文件上传工具类对象:{}", aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());

    }
}
  1. 编写通用上传文件接口
java 复制代码
/**
 * 通用接口
 */
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {

    @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/upload")
    @ApiOperation("文件上传")
    public Result<String> upload(MultipartFile file){
        log.info("文件上传:{}", file);

        try {
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            // 后缀
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            String objectName = UUID.randomUUID().toString() + extension;
            // 文件的请求路径
            String filePath = aliOssUtil.upload(file.getBytes(), objectName);
            return Result.success(filePath);
        } catch (IOException e) {
            log.error("文件上传失败:{}", e);
        }

        return Result.error(MessageConstant.UPLOAD_FAILED);
    }
}
  1. 上传文件到 OSS

从前端调用上面的上传文件的接口,就可以将文件上传到 OSS 上,并且获取到访问 OSS 文件路径的 URL 地址。

相关推荐
一勺菠萝丶1 小时前
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
xml·spring boot·mybatis
保持学习ing2 小时前
苍穹外卖day3--公共字段填充+新增菜品
java·阿里云·实战·springboot·前后端·外卖项目·阿里云文件存储
RainbowSea3 小时前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
风象南3 小时前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗3 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好4 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui4 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农4 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6664 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
一头生产的驴6 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf