59 lines
1.7 KiB
Java
59 lines
1.7 KiB
Java
|
|
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;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 文件上传控制器
|
|||
|
|
* <p>
|
|||
|
|
* 仅提供 OSS 直传 Token 获取接口。
|
|||
|
|
* 实际文件上传由前端直接发送到阿里云 OSS,不经过后端。
|
|||
|
|
* </p>
|
|||
|
|
*
|
|||
|
|
* <h3>使用流程:</h3>
|
|||
|
|
* <ol>
|
|||
|
|
* <li>前端调用 GET /api/v1/files/oss/token 获取签名 Token</li>
|
|||
|
|
* <li>前端使用 FormData 将文件 + Token 直接 POST 到阿里云 OSS</li>
|
|||
|
|
* </ol>
|
|||
|
|
*/
|
|||
|
|
@RestController
|
|||
|
|
@RequestMapping("/api/v1/files")
|
|||
|
|
@RequiredArgsConstructor
|
|||
|
|
@Tag(name = "文件上传")
|
|||
|
|
public class FileUploadController {
|
|||
|
|
|
|||
|
|
private final OssUtils ossUtils;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取阿里云 OSS 直传 Token
|
|||
|
|
* <p>
|
|||
|
|
* 用于前端直传文件到 OSS,无需经过后端中转
|
|||
|
|
* </p>
|
|||
|
|
*
|
|||
|
|
* @param fileName 原始文件名(如:图片.jpg)
|
|||
|
|
* @param dir 目录前缀(可选,如:avatar, course/cover)
|
|||
|
|
* @return OSS 直传 Token VO
|
|||
|
|
*/
|
|||
|
|
@GetMapping("/oss/token")
|
|||
|
|
@Operation(summary = "获取阿里云 OSS 直传 Token")
|
|||
|
|
public Map<String, Object> getOssToken(
|
|||
|
|
@RequestParam("fileName") String fileName,
|
|||
|
|
@RequestParam(value = "dir", required = false) String dir) {
|
|||
|
|
|
|||
|
|
OssTokenVo token = ossUtils.generatePostObjectToken(fileName, dir);
|
|||
|
|
|
|||
|
|
Map<String, Object> result = new HashMap<>();
|
|||
|
|
result.put("code", 200);
|
|||
|
|
result.put("message", "success");
|
|||
|
|
result.put("data", token);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
}
|