2010-05-16 1 views
2

주어진 개체 X; 이 물체에 이미지가 있기를 바랍니다. 이미지는 데이터베이스에 저장해야합니다. 경로를 저장할 수 없으며 실제 이미지는 데이터베이스에 있어야합니다.Java 및 PostgreSQL을 사용하여 웹 응용 프로그램에서 이미지를 저장, 검색 및 그려주는 방법은 무엇입니까?

내 질문은 다음 subquestions 응답 응답 할 수 있습니다

A). 어떤 유형의 필드를 데이터베이스에 넣어야합니까? (예 : VARCHAR)

b) 이미지를 저장하고 조작하기 위해 어떤 유형의 객체를 사용해야합니까? (예 : java.awt.Image)

c) 데이터베이스에서 얻은 데이터로부터 선택된 유형의 객체 (질문 b의 대답)를 어떻게 만듭니 까?

d) 선택한 유형의 개체 (질문 b의 대답)를 데이터베이스에 저장하려면 어떻게해야합니까?

e) 어떻게 웹 페이지에 이미지를 그립니까?

저는 PostgreSQL, Java를 사용하고 있으며 웹 응용 프로그램입니다.

감사합니다.

+0

1 단계 : 데이터베이스에 이미지를 저장하지 마십시오. 그게 파일 시스템을위한거야. –

+0

그래, 알아. 나는 주위를 확인하고 모두가 데이터베이스에 저장하지 말라고 말하지만 학교 프로젝트이며 나는 그렇게하도록 요청 받았습니다. 감사! –

+0

데이터베이스에 이미지를 저장하는 것이 좋습니다. 모든 달걀이 하나의 바구니에 있으면 백업/복원 계획을 간소화 할 수 있습니다. HTTP를 통해 이미지를 다시 제공하기 위해이 데이터베이스를 사용하는 경우 DB 외부에 일종의 캐시가 필요하다고 말합니다. – araqnid

답변

5

a) 어떤 유형의 필드를 데이터베이스에 넣어야합니까? (예 : VARCHAR)

이미지는 바이너리 데이터입니다. 바이너리 필드 만 사용하십시오. PostgreSQL에서는 bytea입니다.

b) (개체 계층에서) 이미지를 저장하고 조작 할 때 어떤 형식의 개체를 사용해야합니까? (예 : java.awt.Image)

InputStream 또는 byte[]을 사용하여 저장하십시오. Java 2D API에는 이러한 유형을 취할 수있는 클래스/메소드가 있습니다.

c) 데이터베이스에서 얻은 데이터 중에서 선택된 유형의 개체 (질문 b의 대답)를 어떻게 만듭니 까?

사용 ResultSet#getBinaryStream() 그것의 byte[]을 얻기 위해 그것의 InputStream 또는 ResultSet#getBytes()를 얻을 수 있습니다.

d) 선택한 유형의 개체 (질문 b의 대답)를 데이터베이스에 저장하려면 어떻게해야합니까?

PreparedStatement#setBinaryStream() 또는 PreparedStatement#setBytes()을 사용하십시오. 참고 : JDBC/PreparedStatement을 처음 접하는 사용자의 경우 Sun basic JDBC tutorial을 직접 사용해 보시기 바랍니다.

e) 어떻게 웹 페이지에 이미지를 그립니까?

Servleturl-pattern 일치하는 URL에 그 src 가리키는 HTML <img> 요소를 사용합니다. 이미지 식별자를 요청 매개 변수 또는 pathinfo로 전달할 수 있습니다. Servlet 안에 보통 얻은 InputStream을 보통 Java IO 방법으로 응답의 OutputStream에 씁니다. this answer에서 코드 예를 찾을 수 있습니다. 데이터베이스에 원시 이미지를 저장했다

은 일반적으로 좋은 생각이 아니다. 브라우저가 처리해야 할 내용을 알 수 있도록 응답 헤더에 모두 필요한 content type (예 : image/jpeg, image/gif 등)과 같이 일부 메타 데이터도 함께 저장해야합니다.

+0

화려한 대답. 매우 철저하다 – Timothy

+0

설명했다 ... 감사 –

관련 문제