Open INAUGURATE-Ryong opened 6 months ago
CREATE TABLE Employee (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(255),
Photo BLOB
);
INSERT INTO Employee (EmployeeID, Name, Photo) VALUES (1, 'John Doe', LOAD_FILE('/path/to/image.jpg'));
위의 방법으로 간단하게 생성 가능하지만 사진 파일의 경로 지정으로 사진이 저장되어 있는 기기가 아니라면 업로드가 불가할 것으로 예상됩니다. 혹시 위의 문제 해결 방법을 아시는 분 공유 부탁드립니다.
https://okky.kr/questions/218429
위와 같은 이유로 db에 image file을 직접 넣지 않고 메타데이터만 넣어두는게 효율적일듯 합니다.
https://hs-archive.tistory.com/42
저는 우선 코드 레퍼런스 위주로 찾아서 넣어놨어용
여러 레포들을 참고해 종합해본 결과 DB에 직접 사진을 저장하는 방법은 서버 과부하나 용량 증가로 인해서 좋지 않을 것 같습니다. 사진을 따로 서버에 올려놓고 DB에서는 테이블 내에서 URL주소로 불러오는 방법이 좋을 것 같습니다.
아래는 예시 입니다.
CREATE TABLE ImageTable (
ImageID INT PRIMARY KEY,
ImageURL VARCHAR(255)
);
INSERT INTO ImageTable (ImageID, ImageURL) VALUES (1, 'https://github.com/username/repo/raw/main/path/to/image.jpg');
2. Spring boot controller
```java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@Controller
public class ImageController {
@GetMapping("/image")
public String getImage(Model model) {
String url = "jdbc:mariadb://localhost:3306/your_database";
String username = "your_username";
String password = "your_password";
try {
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
String query = "SELECT ImageURL FROM ImageTable WHERE ImageID = ?";
try (PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setInt(1, 1);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
String imageUrl = rs.getString("ImageURL");
model.addAttribute("imageUrl", imageUrl);
}
}
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return "image"; // Thymeleaf 템플릿 이름
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Page</title>
</head>
<body>
<img th:src="${imageUrl}" alt="Image">
</body>
</html>
위 방법은 어떠한지 의견 부탁드립니다.