DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

2개의 답변

일반적인 이미지 다운로드를 적용하고 diskcache 옵션을 주면 캐싱을 하기 때문에 충분히 큰 값을 지정해주면  굳이 db에 넣으실 필요가 없을 듯 합니다만.

https://stackoverflow.com/questions/23280242/using-picasso-with-custom-disk-cache

굳이 db에 저장을 하신다면 

1. http get protocal로 서버의 이미지를 다운로드 하여 파일로 생성

2. 파일의 데이터를 bitmap으로 로드

3. bitmap에서 bytearray 획득

4. db에 bytearray 값을 raw형식으로 저장 혹은 base64 encoding)연산하여 저장

순서로 하면 되며,

사용시엔 

1. db에서 raw형식의 데이터를 읽어(base64로 저장시엔 decoding 수행) bytearray 형식의 데이터 획득

2. bytearray 로 bitmap 생성

3. imageview에 bitmap 설정

순으로 진행하시면 됩니다

익명사용자 님이 2019년 7월 15일 답변
꿀개님이 2019년 7월 22일 채택됨

윤관희

unread,

Nov 8, 2001, 4:44:17 PM11/8/01

to

이미지를 DB에 저장하려면 어떻게 하죠?
반대로 DB에 저장되어 있는 이미지를 웹에서 보여주려면 어떻게 하죠?
DB는 SQL Server 2000입니다.

blue

unread,

Nov 12, 2001, 12:01:30 PM11/12/01

to

꼭 DB에 이미지를 저장해야 하는지요 ?
저도 그 방법을 찾아 보았지만, 그리 권장할만한 일이 아니어서 포기 했습니다.

왜냐면 이미지는 이외로(?) 양이 많은 관계로 DB에 부하를 많이 주는것으로
알고 있습니다.

그래서 많은 분들이 DB에 이미지를 저장하는 것보다는
이미지는 서버에 저장한 다음 이미지경로를 DB에 저장하는 방법을 사용하고
있습니다.

즉....
이미지를 서버에 올리고..... C:\Inetbup\wwwroot\website\image 에 이미지를
올린 후
DB에는 그 경로를 ..... http://IP or Website Name/image/image.gif
등을 사용합니다.

DB에 이미지를 넣는것 보다 이방법이 사용하시기 쉬울것 같은데........
꼭 DB에 넣어야 한다면....... 어쩔 수 없네요.....


"윤관희" <> wrote in message
news:eaedrhBaBHA.2068@tkmsftngp02...

미친병아리 (madchick)

unread,

Nov 13, 2001, 2:57:45 AM11/13/01

to

제가 알기로는 ASP에서 직접 BLOB 필드를 인서트 하고
Select 해오기는 불가능한 것으로 아는데요..

가능하다면.. 무지한 제게 방법을 알려주세요..

제가 알고 있는 방법이라고는 ASP 서버 컴포넌트를 만들어서
처리하는 것인데..

블루님이 답변 올려두신 것 처럼..
웹페이지와의 연동을 위해서라면..
파일시스템으로 업로드 시키고 경로만 DB에 저장하는것이
가장 바람직한 방법이라고 생각됩니다..

굳이 웹 연동뿐만이 아니라
반드시 이미지가 DB에 저장되어야 하는 경우가 아니라면..
(이런 경우가 있는지는 잘 모르겠군요..
제 경험상으로는 없어서리..)
모든 DB 어플리케이션 개발에서 일반적으로
이렇게 하는 것으로 알고 있습니다..

BLOB 필드는 DB에 부하를 아무래도 좀 더 줄테니까요..

기람..

미친병아리 서비였네용.. 삐약~ !!


, http://www.madchick.com

DaulSoft Co., Ltd. 02-529-4722, 02-529-4723(FAX)
, http://www.daulsoft.com
Seohan Bldg #203, Dogok-dong 943-2, Kangnam-gu, Seoul, Korea 135-270

http://www.neotest.com - Something beyond On-Line testing

Industrial Engineering Dept. of Dankook Univ.
,
,
;

미친병아리의 프로그래머 이야기..
http://www.emag21.com/home/?magid=20000522000935

KISS~ !! (Keep It Small and Simple)
Let's share all information we have.


"blue" <> wrote in message
news:OR4laUxaBHA.1540@tkmsftngp04...

Alripica

unread,

Nov 14, 2001, 12:03:11 AM11/14/01

to

"미친병아리 (madchick)" <> wrote in message
news:usilLQ5aBHA.2008@tkmsftngp04...

>
> 제가 알기로는 ASP에서 직접 BLOB 필드를 인서트 하고
> Select 해오기는 불가능한 것으로 아는데요..
>

저도 binary를 데이터베이스에 저장해본적이 없어서 모르겠지만.. ^^;
우선 가져오기는 됩니다. MS KB에 많은 예가 있으니 참고하시면 되겠네요..
SQL SELECT 문으로도 되고, ADO의 GetChunk 메서드를 사용한 예도 있습니다.

데이터베이스에 binary를 저장...
이건 잘모르겠습니다만, ASP 페이지내에서 써비(?)님의 말씀이 거의(?) 맞는듯
합니다. ^^;
MS KB에 보면 AppedChunk에 대한 기사가 있는데 내용은 컴포넌트를 쓰라고
하네요..
http://support.microsoft.com/support/kb/articles/Q200/2/61.ASP

[...]

이하 전적으로 다른 모든 분의 의견에 동의합니다. ^^;

>
>
> 블루님이 답변 올려두신 것 처럼..
> 웹페이지와의 연동을 위해서라면..
> 파일시스템으로 업로드 시키고 경로만 DB에 저장하는것이
> 가장 바람직한 방법이라고 생각됩니다..
>
> 굳이 웹 연동뿐만이 아니라
> 반드시 이미지가 DB에 저장되어야 하는 경우가 아니라면..
> (이런 경우가 있는지는 잘 모르겠군요..
> 제 경험상으로는 없어서리..)
> 모든 DB 어플리케이션 개발에서 일반적으로
> 이렇게 하는 것으로 알고 있습니다..
>
>
>
> BLOB 필드는 DB에 부하를 아무래도 좀 더 줄테니까요..
>

[...]

이미지 파일 불러오기

업로드한 이미지를 로컬 디렉토리에 저장하고, 그 경로를 DB에 저장했다. 이제 그 경로를 통해, 이미지를 불러와서, View를 누를 시, 이미지가 보여지게 만들 것이다.

front-end

현재까지 View 페이지는 아래와 같다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

Image Path가 잘 나오는 걸 확인했으므로, Image Path는 안보이게 하고, Image Path를 통해 이미지를 불러와서 보여주려고 한다.

현재 기본 Detail html 코드는 아래와 같다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

img객체를 불러와서 그 값을 출력해 주는 형태이다. 이미지를 출력하기 위해 아래의 코드를 추가해준다.

<dt><span>Image</span></dt>
<dd>
	<div *ngIf="img.image">
		<a (click)="openFile(img.imageContentType, img.image)">
			<img [src]="'data:' + img.imageContentType + ';base64,' + img.image" style="max-width: 100%;" alt="image image"/>
		 </a>
		{{img.imageContentType}}, {{byteSize(img.image)}}
	</div>
</dd>

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

component파일에 openFile, byteSize를 추가해준다.

openFile(파일을 열기 위함)

  openFile(contentType, field) {
    return this.dataUtils.openFile(contentType, field);
  }

byteSize(바이트 사이즈를 구하기 위함)

  byteSize(field) {
    return this.dataUtils.byteSize(field);
  }

이 과정까지 하고 view를 누르면 아래와 같은 화면이 나온다.
백 엔드 부분에서 img객체에 해당 경로를 통해 이미지를 불러와 byte로 넣어주면 view화면에서 이미지가 보여질 것이다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

back-end

view를 누르면 get 방식으로 id값이 전달된다.

Resource.java 파일의 @GetMapping 부분으로 연결이 된다. 아래는 기본 Resource파일이다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

Service 파일의 findOne 을 통해 Id별로 저장되어있는 DTO를 가져와서 리턴해준다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

그러면 Resource파일의 Optional<ImgDTO> imgDTO에는 해당 id를 가진 테이블의 title, content, image_path가 들어있을 것이다.

우리는 image_path를 다시 바이트파일로 만들어서 front-end쪽으로 넘겨줘야한다.

image_path 값을 읽어와서, 파일이 어디 저장되어있는지 확인하고, 그 경로를 Path 객체로 만들어준다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

Path 객체를 통해, File을 바이트로 읽어온다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

DTO의 setter를 이용하여, 생성한 바이트 파일과, imageContentType 값을 넘겨준다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

그럼 front-end로 DTO가 전달되고, <img [src] /> 태그안에 imageContentType과 바이트파일을 넣어주면, 이미지가 제대로 출력됨을 볼 수 있다.

DB 이미지 저장 불러 오기 - DB imiji jeojang bulleo ogi

전체코드는 아래 주소에서 확인 할 수 있다.(img로 시작하는 부분만 (image와 upload-image는 아닙니다!!))
https://github.com/KJunseo/JHipster-image-handling