package com.example.oss.controller; import com.example.oss.util.OssUtils; import com.example.oss.vo.OssTokenVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; /** * 文件上传控制器 *

* 仅提供 OSS 直传 Token 获取接口。 * 实际文件上传由前端直接发送到阿里云 OSS,不经过后端。 *

* *

使用流程:

*
    *
  1. 前端调用 GET /api/v1/files/oss/token 获取签名 Token
  2. *
  3. 前端使用 FormData 将文件 + Token 直接 POST 到阿里云 OSS
  4. *
*/ @RestController @RequestMapping("/api/v1/files") @RequiredArgsConstructor @Tag(name = "文件上传") public class FileUploadController { private final OssUtils ossUtils; /** * 获取阿里云 OSS 直传 Token *

* 用于前端直传文件到 OSS,无需经过后端中转 *

* * @param fileName 原始文件名(如:图片.jpg) * @param dir 目录前缀(可选,如:avatar, course/cover) * @return OSS 直传 Token VO */ @GetMapping("/oss/token") @Operation(summary = "获取阿里云 OSS 直传 Token") public Map getOssToken( @RequestParam("fileName") String fileName, @RequestParam(value = "dir", required = false) String dir) { OssTokenVo token = ossUtils.generatePostObjectToken(fileName, dir); Map result = new HashMap<>(); result.put("code", 200); result.put("message", "success"); result.put("data", token); return result; } }