springboot作为后端MySQL作为数据库实现图片的存储代码
时间: 2024-03-02 15:52:00 浏览: 135
以下是使用 Spring Boot 和 MySQL 实现图片存储的示例代码:
1. 引入依赖
在 pom.xml 文件中添加以下依赖:
```xml
<dependencies>
<!-- Spring Boot web 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Spring Data JPA 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Test 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
```
2. 创建实体类
创建一个名为 `Image` 的实体类,用于表示图片。
```java
@Entity
@Table(name = "image")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String contentType;
@Lob
private byte[] data;
// 省略 getter 和 setter 方法
}
```
3. 创建数据访问层
创建一个名为 `ImageRepository` 的数据访问层接口,继承自 JpaRepository 接口,用于操作数据库中的 `image` 表。
```java
@Repository
public interface ImageRepository extends JpaRepository<Image, Long> {
}
```
4. 创建业务逻辑层
创建一个名为 `ImageService` 的业务逻辑层类,用于处理图片相关的业务逻辑。
```java
@Service
public class ImageService {
@Autowired
private ImageRepository imageRepository;
public Image saveImage(String name, String contentType, byte[] data) {
Image image = new Image();
image.setName(name);
image.setContentType(contentType);
image.setData(data);
return imageRepository.save(image);
}
public Optional<Image> getImageById(Long id) {
return imageRepository.findById(id);
}
public List<Image> getAllImages() {
return imageRepository.findAll();
}
public void deleteImageById(Long id) {
imageRepository.deleteById(id);
}
}
```
5. 创建控制器
创建一个名为 `ImageController` 的控制器类,用于接收客户端上传的图片并保存到数据库中。
```java
@RestController
@RequestMapping("/images")
public class ImageController {
@Autowired
private ImageService imageService;
@PostMapping
public ResponseEntity<Image> uploadImage(@RequestParam("file") MultipartFile file) throws IOException {
String name = file.getOriginalFilename();
String contentType = file.getContentType();
byte[] data = file.getBytes();
Image image = imageService.saveImage(name, contentType, data);
return ResponseEntity.ok(image);
}
@GetMapping("/{id}")
public ResponseEntity<Resource> getImageById(@PathVariable Long id) {
Optional<Image> imageOptional = imageService.getImageById(id);
if (!imageOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
Image image = imageOptional.get();
ByteArrayResource resource = new ByteArrayResource(image.getData());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, image.getContentType())
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + image.getName() + "\"")
.body(resource);
}
@GetMapping
public ResponseEntity<List<Image>> getAllImages() {
List<Image> images = imageService.getAllImages();
return ResponseEntity.ok(images);
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteImageById(@PathVariable Long id) {
Optional<Image> imageOptional = imageService.getImageById(id);
if (!imageOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
imageService.deleteImageById(id);
return ResponseEntity.noContent().build();
}
}
```
以上代码实现了上传图片、获取图片、获取所有图片、删除图片等接口。其中,上传图片接口使用了 `@RequestParam` 注解,用于接收客户端传递的文件;获取图片接口使用了 `@PathVariable` 注解,用于获取 URL 中的图片 ID。
阅读全文