SpringBoot+OSS实现文件上传

创建spring boot项目

pom依赖

xml 复制代码
 <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.4</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- no more than 2.3.3-->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>

yaml配置文件

application.yaml

yaml 复制代码
server:
  port: 8089
spring:
  profiles:
    active: dev
alioss:
  endpoint: ${alioss.endpoint}
  accessKeyId: ${alioss.accessKeyId}
  accessKeySecret: ${alioss.accessKeySecret}
  bucketName: ${alioss.bucketName}

application-dev.yaml

yaml 复制代码
alioss:
  endpoint: oss-cn-beijing.aliyuncs.com
  accessKeyId: 写自己的keyId
  accessKeySecret: 写自己的密钥
  bucketName: 写自己的bucketName

文件上传工具类

java 复制代码
package com.pkq.demo.utils;


import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * ClassName: AliOSSUtils
 * Package: com.pkq.demo.utils
 * Description:
 *
 * @Author pkq
 * @Create 2024-07-05 15:09
 * @Version 1.0
 */
@Component
@Slf4j
public class AliOSSUtils {
    @Value("${alioss.endpoint}")
    private String endpoint;
    @Value("${alioss.accessKeyId}")
    private String accessKeyId;
    @Value("${alioss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${alioss.bucketName}")
    private String bucketName;
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile multipartFile) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = multipartFile.getInputStream();

        // 避免文件覆盖
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url ="https://" + bucketName + "." + endpoint + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

通用返回结果类

java 复制代码
package com.pkq.demo.result;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * ClassName: Result
 * Package: com.pkq.demo.result
 * Description:
 *
 * @Author pkq
 * @Create 2024-07-05 15:23
 * @Version 1.0
 */
@Data
@NoArgsConstructor
public class Result<T> {
    private Integer code;
    private String message;
    private T data;
    public Result(T data) {
        this(200,null,data);
    }
    public Result(int code, String message) {
        this(code,message,null);
    }
    public Result(int code, String message,T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }


    public static <T> Result<T> success(T data) {
        return new Result<>(data);
    }

    public static <T> Result<T> fail(String message) {
        return new Result<>(500, message);
    }

    public static <T> Result<T> fail(int code, String message) {
        return new Result<>(code, message);
    }
}

文件上传接口

java 复制代码
package com.pkq.demo.controller;

import com.pkq.demo.result.Result;
import com.pkq.demo.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * ClassName: UploadController
 * Package: com.pkq.demo.controller
 * Description:
 *
 * @Author pkq
 * @Create 2024-07-05 15:27
 * @Version 1.0
 */
@Slf4j
@RestController
public class UploadController {

    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/upload")
    public Result<String> upload(MultipartFile image) throws IOException {
        //调用阿里云OSS工具类,将上传上来的文件存入阿里云
        String url = aliOSSUtils.upload(image);
        //将图片上传完成后的url返回,用于浏览器回显展示
        return Result.success(url);
    }

}

测试

相关推荐
汪子熙2 分钟前
什么是 ArkTS
后端·面试
鸡蛋灌Bean2 分钟前
Java常用设计模式大全
java·开发语言·设计模式
喝可乐的布偶猫3 分钟前
Java-----韩顺平单例设计模式学习笔记
java·笔记·设计模式
汪子熙4 分钟前
深入解析计算机科学中的 Opaque 概念
后端
满分观察网友z14 分钟前
从混乱到有序:我用“逐层扫描”法优雅搞定公司组织架构图(515. 在每个树行中找最大值)
后端·算法
AskHarries16 分钟前
深入探索Java虚拟机的神秘接口:JVMTI
java·jvm
风象南18 分钟前
SpringBoot应用开机自启动与进程守护配置
java·spring boot·后端
寻月隐君21 分钟前
Rust核心利器:枚举(Enum)与模式匹配(Match),告别空指针,写出优雅健壮的代码
后端·rust·github
满分观察网友z21 分钟前
一行代码的惊人魔力:从小白到大神,我用递归思想解决了TB级数据难题(3304. 找出第 K 个字符 I)
后端·算法
程序员岳焱22 分钟前
Java 与 MySQL 性能优化:MySQL连接池参数优化与性能提升
后端·mysql·性能优化