图片存储在MySQL中的两种方法

1. 直接存储图片

  • 文件大小:MySQL数据库本身对存储的文件大小有,这可能导致无法存储大尺寸的图片。
  • 性能影响:直接存储大量图片会占用数据库大量空间,影响数据库性能。
  • 安全性:图片存储在数据库中,可能面临数据泄露的风险。

2. 存储图片路径

  • 文件位置统一:所有图片需要存储在一个统一的位置,以便通过路径访问。
  • 访问效率:通过路径访问图片可能比直接访问数据库中的图片文件慢一些。

如何在MySQL中创建表并存储图片

创建表

CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    image_name VARCHAR(255) NOT NULL,
    image_path VARCHAR(255) NOT NULL
);

图片上传功能实现

@PostMapping("/upload")
public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
    try {
        // 生成图片路径
        String path = "/path/to/save/images/" + file.getOriginalFilename();

        // 保存图片文件
        File保存图片文件(file.getInputStream(), path);

        // 将图片路径保存到数据库
        String imageUrl = "http://localhost:8080/" + path;
        imageRepository.save(new Image(null, file.getOriginalFilename(), imageUrl));

        return ResponseEntity.ok("Image uploaded successfully!");
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error uploading image: " + e.getMessage());
    }
}

如何使用JDBC或ORM框架从数据库读取图片信息

使用JDBC

public byte[] getImageById(int id) throws SQLException {
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
    PreparedStatement statement = connection.prepareStatement("SELECT image_data FROM images WHERE id = ?");
    statement.setInt(1, id);
    ResultSet resultSet = statement.executeQuery();
    if (resultSet.next()) {
        return resultSet.getBytes("image_data");
    }
    return null;
}

使用MyBatis

<select id="getImageById" resultType="byte[]">
    SELECT image_data FROM images WHERE id = #{id}
</select>

图片懒加载和CDN加速

为了优化网站性能,可以使用以下两种技术:

1. 图片懒加载

2. CDN加速