文件上传

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