library-picturebook-activity/oss-direct-upload-demo/backend/FileUploadController.java

59 lines
1.7 KiB
Java
Raw Permalink Normal View History

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;
}
}