74 lines
2.6 KiB
Java
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);
|
|
}
|
|
} |