Files
cuimengxue/backend/src/main/java/com/maternalmall/controller/FileUploadController.java
wangziqi 1233d86230 fix: 修复文件上传接口的 CORS 跨域问题
在 FileUploadController 上添加 @CrossOrigin 注解
在 WebMvcConfig 中排除 /api/upload/** 路径的拦截器
2026-02-10 16:04:40 +08:00

74 lines
2.6 KiB
Java

package com.maternalmall.controller;
import com.maternalmall.common.ApiResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE, RequestMethod.OPTIONS})
public class FileUploadController {
@Value("${app.upload-path:./uploads}")
private String uploadPath;
@Value("${app.upload-url-prefix:/uploads}")
private String uploadUrlPrefix;
@PostMapping("/upload")
public ApiResponse<String> uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ApiResponse.fail("请选择要上传的文件", String.class);
}
try {
// 创建上传目录
Path uploadDir = Paths.get(uploadPath);
if (!Files.exists(uploadDir)) {
Files.createDirectories(uploadDir);
}
// 生成唯一文件名
String originalFilename = file.getOriginalFilename();
String extension = "";
if (originalFilename != null && originalFilename.contains(".")) {
extension = originalFilename.substring(originalFilename.lastIndexOf("."));
}
String newFilename = UUID.randomUUID().toString().replace("-", "") + extension;
// 保存文件
Path filePath = uploadDir.resolve(newFilename);
file.transferTo(filePath.toFile());
// 返回文件URL
String fileUrl = uploadUrlPrefix + "/" + newFilename;
return ApiResponse.ok(fileUrl);
} catch (IOException e) {
return ApiResponse.fail("文件上传失败: " + e.getMessage(), String.class);
}
}
@PostMapping("/upload/image")
public ApiResponse<String> uploadImage(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ApiResponse.fail("请选择要上传的图片", String.class);
}
// 检查文件类型
String contentType = file.getContentType();
if (contentType == null || !contentType.startsWith("image/")) {
return ApiResponse.fail("只能上传图片文件", String.class);
}
return uploadFile(file);
}
}