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