Java blob画像の保存


📌CLOB BLOB


CLOB:文字の大きいオブジェクト
BLOB:バイナリ大オブジェクト(バイナリ)
BLOBでは、LOBはLarge Objectの略で、大量のデータを格納できるデータ型を指す.
Bとは、バイナリの大きなオブジェクト(バイナリ)のことです.
通常は、画像、ビデオ、MP 3などを格納するタイプに指定されます.

📌業務説明


Web上では、画像の大部分がurl形式でsrcにバインドされ、画像タグに格納されますが、他の部門(他のドメイン)が人事チームドメインにアクセスすると、ビジネスにそれぞれ権限が付与されます.
イメージは全従業員によって使用されるため、権限付与時にイメージに不正な変更や削除が行われる可能性があるため、他の権限は追加できません.
他部署とのミーティングでは、画像データをblobタイプに格納してバイナリに変換し、BASE 64 ENCODEで使用する.
(バイナリ変換時に生成される文字列が非常に長いため、dbは重くなります.より多くの状況を理解し、十分な時間があれば、より効果的な方法があるはずです.😥)

📌コード#コード#

try {
    //이미지 함수
	Image image;
	Image resizeImage;
	
    //forMointargetFile 실제 파일이 저장되어 있는 경로
	image = ImageIO.read(new File(forMointargetFile));

    //이미지 사이즈 조절
	resizeImage = image.getScaledInstance(70, 90, Image.SCALE_SMOOTH);
	
    //이미지 객체 생성
	BufferedImage newImage = new BufferedImage(70, 90, BufferedImage.TYPE_INT_RGB);

    //이미지의 그래픽 객체
	Graphics g = newImage.getGraphics();
	g.drawImage(resizeImage, 0, 0, null);
	g.dispose();

    //이미지 출력 , 이미지를 파일출력스트림을 통해 JPG 타입으로 출력
	ImageIO.write(newImage, "jpg", new File(forMointargetFile));

//예외처리
} catch (IOException e1) {
	// TODO Auto-generated catch block
	if(logger.isDebugEnabled() || logger.isInfoEnabled()) logger.debug("Error");
}

//[2]. 2진형태로 변환후 쿼리 날리기 
try {
	File file = new File(forMointargetFile);
	int len;
	String query;

    //바이트 스트림으로 읽기위한 FileInputStream 객체
	FileInputStream fis = new FileInputStream(file);

	len = (int)file.length();
	Connection conn = null;

    //dataSource-Oracle 오라클 접속 정보가 들어있는 Bean 
	conn = DataSourceUtils.getConnection((DataSource) SpringContextUtil.getBean("dataSource-Oracle"));
	
    //실제 쿼리 (조건절에 직접 파라미터를 넘기지 않고 PreparedStatement 이용해 ? 형태로 변환 가능 )
    query = ("UPDATE TEST_TB SET FILE_DATA = ? WHERE TEST_COL = '" + data.get("조건 파라미터")+"'");
	PreparedStatement pstmtImage = null;
	try {
		pstmtImage = conn.prepareStatement(query);
		pstmtImage.setBinaryStream(1, fis, len);
		pstmtImage.addBatch();
		pstmtImage.executeBatch() ;
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		if(logger.isDebugEnabled() || logger.isInfoEnabled()) logger.debug("blob SQLException " + e.getMessage());
	} 
	
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	if(logger.isDebugEnabled() || logger.isInfoEnabled()) logger.debug("Exception " + e.getMessage());
}