SpringBoot 文件上传与阿里云 OSS 集成

一、文件上传基础

1. 简介

文件上传指将本地文件(图片、音视频等)传输至服务器存储,广泛应用于社交、内容发布等场景。

2. 前端表单三要素(必填)

  1. 提交方式:method="post"
  2. 编码格式:enctype="multipart/form-data"
  3. 文件组件:<input type="file">

示例代码

html 复制代码
<form action="/upload" method="post" enctype="multipart/form-data">
    姓名: <input type="text" name="name"><br>
    图像: <input type="file" name="file"><br>
    <input type="submit" value="上传">
</form>

3. SpringBoot 服务端接收

使用 MultipartFile 接收前端上传文件

java 复制代码
@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile file) {
        log.info("接收上传文件:{}", file);
        return Result.success();
    }
}

二、本地上传存储

1. 核心API

  • getOriginalFilename():获取文件原始名称
  • transferTo(File dest):将文件保存至服务器本地路径

2. 生成唯一文件名(防止覆盖)

借助 UUID 拼接文件后缀

java 复制代码
private String getUniqueFileName(String originalFilename) {
    String uuid = UUID.randomUUID().toString().replace("-", "");
    String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    return uuid + suffix;
}

3. 完整上传接口

java 复制代码
@PostMapping("/upload")
public Result upload(MultipartFile file) throws Exception {
    String fileName = getUniqueFileName(file.getOriginalFilename());
    // 保存到指定目录
    file.transferTo(new File("D:/images/" + fileName));
    return Result.success();
}

4. 文件大小限制(application.yml)

yaml 复制代码
spring:
  servlet:
    multipart:
      max-file-size: 10MB    # 单个文件上限
      max-request-size: 100MB # 单次请求总数据上限

三、阿里云 OSS 对象存储

1. 简介

OSS 是阿里云云存储服务,用于存放图片、视频等资源,可通过网络随时访问。

2. 核心概念

  • Bucket:存储空间,所有文件必须存放在指定 Bucket 中
  • SDK:官方开发工具包,提供上传、下载等操作能力

3. 开通使用步骤

  1. 注册阿里云账号并完成实名认证
  2. 开通对象存储 OSS 服务
  3. 创建 Bucket 存储空间
  4. 获取 AccessKey(密钥)
  5. 引入 SDK、编写代码实现上传

4. AccessKey 环境变量配置

临时配置(当前命令行有效)

cmd 复制代码
set OSS_ACCESS_KEY_ID=你的ID
set OSS_ACCESS_KEY_SECRET=你的密钥

永久配置

cmd 复制代码
setx OSS_ACCESS_KEY_ID "你的ID"
setx OSS_ACCESS_KEY_SECRET "你的密钥"

验证

cmd 复制代码
echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%

四、SpringBoot 集成阿里云 OSS

1. 配置文件(application.yml)

yaml 复制代码
aliyun:
  oss:
    endpoint: https://oss-cn-beijing.aliyuncs.com
    bucketName: java-ai
    region: cn-beijing

2. 配置注入两种方式

方式一:@Value(少量配置)
java 复制代码
@Component
public class AliyunOSSOperator {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
}
方式二:@ConfigurationProperties(多配置、推荐)

配置实体类

java 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssProperties {
    private String endpoint;
    private String bucketName;
    private String region;
}

工具类注入使用

java 复制代码
@Component
public class AliyunOSSOperator {
    @Autowired
    private AliyunOssProperties ossProperties;

    // 上传方法
    public String upload(byte[] fileBytes, String originalName) throws Exception {
        // 上传逻辑
        return "";
    }
}

3. 上传接口

java 复制代码
@RestController
public class UploadController {
    @Autowired
    private AliyunOSSOperator ossOperator;

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws Exception {
        String url = ossOperator.upload(file.getBytes(), file.getOriginalFilename());
        return Result.success(url);
    }
}
相关推荐
秋天的怀念_David18 分钟前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
Java码农也是农21 分钟前
Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选
java·spring boot·spring·事务
学长毕设1 小时前
基于SpringBoot的游乐园管理系统-附源码
java·spring boot·后端
橙序员小站1 小时前
Windows 安装包反复报错?一次排查补上了 5 个 CI 检查点
后端
陈随易1 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
SimonKing2 小时前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶2 小时前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
杨凯凡2 小时前
Spring Boot 文件上传怎么做才安全?流式落盘、路径校验与数据库一致性实战
java·spring boot·文件上传·后端安全·数据库一致性
张彦峰ZYF2 小时前
功能齐了不等于能上线:智能工单系统的AI回归测试、安全防护、成本可观测与CI/CD生产部署
后端·企业智能工单系统·评测线·安全线·成本线·部署线
这个昵称不容易2 小时前
旅游管理系统的设计与实现(SpringBoot + MySQL + Vue 前后端分离)
java·springboot·毕设