try {
// 验证文件是否为空
if (file.isEmpty()) {
return createErrorResponse("文件不能为空");
}
// 修正文件大小计算
long maxSizeInBytes = maxFileSize * 1024 * 1024L; // 添加 L 确保 long 类型
// 验证文件大小
if (file.getSize() > maxSizeInBytes) {
return createErrorResponse("文件大小不能超过 " + maxFileSize + "MB");
}
// 验证文件类型
String contentType = file.getContentType();
if (contentType == null || !ALLOWED_CONTENT_TYPES.contains(contentType.toLowerCase())) {
return createErrorResponse("不支持的文件类型: " + contentType);
}
// 生成安全的文件名
String originalFilename = file.getOriginalFilename();
String fileExtension = getFileExtension(originalFilename);
String safeFilename = generateSafeFilename(fileExtension);
// 保存文件 - 使用 try-with-resources 确保流被正确关闭
Path filePath = Paths.get(uploadPath, safeFilename);
// 确保上传目录存在
Files.createDirectories(filePath.getParent());
// 关键修改:使用 try-with-resources 确保 InputStream 被正确关闭
try (InputStream inputStream = file.getInputStream()) {
Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING);
} // 这里会自动关闭 inputStream
// 构建图片访问URL
String imageUrl = baseUrl + safeFilename;
// 返回 EasyMDE 期望的响应格式
Map<String, Object> response = new HashMap<>();
Map<String, String> data = new HashMap<>();
data.put("filePath", imageUrl);
response.put("data", data);
return ResponseEntity.ok(response);
} catch (IOException e) {
return createErrorResponse("文件上传失败: " + e.getMessage());
} catch (Exception e) {
return createErrorResponse("服务器错误: " + e.getMessage());
}
