Springboot与mysql结合: 怎么在数据库存入图片然后展示出来,可以举例一下代码吗
时间: 2024-06-10 11:10:27 浏览: 205
在Spring Boot中,存储图片通常是将图片转换为字节数组,然后将其存储在数据库中的BLOB字段中。展示图片时,从数据库中读取字节数组,然后将其转换为图片格式。
以下是一个简单的代码示例,使用Spring Boot和MySQL存储和展示图片:
1. 创建数据库表
创建一个名为“images”的表,其中包含一个名为“image_data”的BLOB字段和一个名为“image_id”的自增长ID字段。
```
CREATE TABLE images (
image_id INT PRIMARY KEY AUTO_INCREMENT,
image_data BLOB
);
```
2. 创建实体类
创建一个名为“Image”的实体类,其中包含一个ID字段和一个字节数组字段。
```
@Entity
@Table(name = "images")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Lob
private byte[] data;
// constructors, getters, setters, etc.
}
```
3. 创建存储服务
创建一个名为“ImageService”的服务类,其中包含一个保存图片的方法和一个获取图片的方法。
```
@Service
public class ImageService {
@Autowired
private ImageRepository imageRepository;
public void saveImage(byte[] data) {
Image image = new Image();
image.setData(data);
imageRepository.save(image);
}
public byte[] getImageById(Long id) {
Optional<Image> image = imageRepository.findById(id);
return image.isPresent() ? image.get().getData() : null;
}
}
```
4. 创建控制器
创建一个名为“ImageController”的控制器类,其中包含两个HTTP端点。一个端点用于上传图片,另一个端点用于获取图片。
```
@RestController
public class ImageController {
@Autowired
private ImageService imageService;
@PostMapping("/image")
public void uploadImage(@RequestParam("file") MultipartFile file) throws IOException {
byte[] data = file.getBytes();
imageService.saveImage(data);
}
@GetMapping("/image/{id}")
public ResponseEntity<byte[]> getImage(@PathVariable("id") Long id) {
byte[] data = imageService.getImageById(id);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<>(data, headers, HttpStatus.OK);
}
}
```
5. 测试
使用Postman或类似的工具向“/image”端点上传图片。然后,使用浏览器或类似的工具访问“/image/{id}”端点,其中“{id}”是刚刚上传图片的ID。应该会显示该图片。
以上是一个简单的示例,说明了如何在Spring Boot中使用MySQL存储和展示图片。请注意,存储和展示图片的最佳做法因应用程序而异。例如,某些应用程序可能需要缩放或裁剪图像,或者使用CDN等外部存储服务。
阅读全文