Java CKEditor 上传图片
介绍
CKEditor是一款功能强大的富文本编辑器,该编辑器具有丰富的功能和插件,使用户可以在网页上创建和编辑各种内容。其中一个常见的需求是允许用户在编辑器中上传图片。
本文将向您展示如何使用Java和CKEditor实现图片上传功能。我们将使用Spring Boot作为后端框架,以及CKEditor和jQuery作为前端框架。
准备工作
在开始之前,确保您已经安装了以下工具和环境:
- Java开发工具(如Eclipse或IntelliJ IDEA)
- JDK 8或更高版本
- Maven构建工具
- MySQL数据库
- Spring Boot
创建Spring Boot项目
首先,我们需要创建一个Spring Boot项目。您可以使用Spring Initializr(
在创建项目时,请确保选择以下依赖项:
- Spring Web
- Spring Data JPA
- MySQL Driver
- Thymeleaf
创建数据库表
我们将使用MySQL数据库存储上传的图片。在MySQL中创建一个名为images
的数据库,并创建以下表:
CREATE TABLE IF NOT EXISTS images (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
path VARCHAR(255)
);
处理图片上传请求
首先,我们需要创建一个Spring MVC控制器来处理图片上传请求。创建一个名为ImageController
的类,并使用@Controller
和@RequestMapping
注释进行注释。在该控制器中,我们将创建两个方法:一个用于显示上传页面,另一个用于实际处理上传请求。
@Controller
public class ImageController {
@Autowired
private ImageRepository imageRepository;
@GetMapping("/upload")
public String showUploadForm() {
return "upload";
}
@PostMapping("/upload")
public String uploadImage(@RequestParam("file") MultipartFile file) {
// 处理上传逻辑
}
}
在上面的代码中,我们使用了@GetMapping
和@PostMapping
注释来分别处理GET和POST请求。showUploadForm
方法用于显示上传页面,而uploadImage
方法用于处理实际的上传逻辑。
创建上传页面
下一步是创建一个用于上传图片的页面。在src/main/resources/templates
目录下创建一个名为upload.html
的文件,并添加以下代码:
<!DOCTYPE html>
<html xmlns:th="
<head>
<meta charset="UTF-8">
<title>Image Upload</title>
<script src="
</head>
<body>
Image Upload
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">Upload</button>
</form>
<script>
ClassicEditor
.create( document.querySelector( 'textarea' ) )
.then( editor => {
console.log( editor );
} )
.catch( error => {
console.error( error );
} );
</script>
</body>
</html>
上面的代码使用了Thymeleaf模板引擎和CKEditor的经典版本。它创建了一个简单的表单,并在<script>
标签中初始化了CKEditor。
处理图片上传逻辑
接下来,我们需要在uploadImage
方法中实现实际的上传逻辑。首先,我们通过调用file.getOriginalFilename()
方法获取上传文件的原始文件名。然后,我们将文件保存到服务器上,并将文件路径保存到数据库中。
@PostMapping("/upload")
public String uploadImage(@RequestParam("file") MultipartFile file) {
try {
String originalFilename = file.getOriginalFilename();
String filePath = "/path/to/save/" + originalFilename;
File dest = new File(filePath);
file.transferTo(dest);
Image image = new Image();
image.setName(originalFilename);
image.setPath(filePath);
imageRepository.save(image);
return "redirect:/images";
} catch (IOException e) {
e.printStackTrace();
return "upload";
}
}
在上面的代码中,我们首先创建一个File
对象来表示上传文件的目标位置,然后使用transferTo
方法将文件保存到该位置。接下来,我们创建一个新