반응형
11-24 16:59
Today
Total
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
관리 메뉴

개발하는 고라니

[Javascript] Image 미리보기 본문

Languages/JS

[Javascript] Image 미리보기

조용한고라니 2021. 5. 27. 15:24
반응형

이미지 파일을 서버에 업로드 하기전에 클라이언트 단에서 먼저 이미지를 미리보기 하고 올리고 싶을 경우가 있다. 이전에는 몇 가지 복잡한 방법을 사용했으나, 이제는 간단한 자바스크립트 처리로 충분히 가능하다.

FileReader

출처: https://developer.mozilla.org/ko/docs/Web/API/FileReader

FileReader 객체는 웹 어플리케이션이 비동기적으로 데이터를 읽기 위해 읽을 파일을 가리키는 File 혹은 Blob 객체를 이용해 파일의 내용을 읽고 사용자의 컴퓨터에 저장하는 것을 가능하게 해준다.

 

File 객체는 <input> 태그를 이용하여 유저가 선택한 파일들의 결과로 반환된 FileList 객체, 드래그 앤 드랍으로 반환된 DataTransfer 객체 혹은 HTMLCanvasElement의 mozGetAsFile() API로부터 얻는다.

Event Handler

이미지 미리보기

먼저 테스트할 HTML을 준비한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.thumbnail{
		width: 200px;
		height: 200px;
	}
</style>
</head>
<body>

<div class="container">
	<input name="file" type="file">
	<hr>
	<div class="frame">
	
	</div>
</div>
</body>
</html>

그리고 file에 파일이 들어오면 처리될 이벤트 함수를 할당해주도록 자바스크립트로 코딩한다.

window.addEventListener('load', function() {
	
	const container = document.querySelector('.container');
	const frame = container.querySelector('.frame');
	const fileInput = container.querySelector('input[type="file"]');
	
	fileInput.addEventListener('input', () => {
		
		if(!isImage(fileInput.files[0])) {
			alert('Image 파일만 업로드 할 수 있습니다.');
			return;
		}
		
		const reader = new FileReader();
		
		reader.addEventListener('load', () => {
			
			const img = document.createElement('IMG');
			img.classList.add('thumbnail');
			img.src = reader.result;
			
			frame.insertAdjacentElement('beforeend', img);
		});
		
		reader.readAsDataURL(fileInput.files[0]);
	});
	
	function isImage(file){
		return file.type.indexOf('image') >= 0;
	}
});

FileReader의 readAsDataURL()은 비동기로 처리되기 때문에 이 줄 밑에서 미리보기 이미지를 생성해 프레임에 붙이려고 하면 안된다.

 

따라서 load 이벤트( 완료가 되었을 때 발생 )에 이벤트함수를 달아 이미지가 보여지게 한다.

 

# Reference

https://developer.mozilla.org/ko/docs/Web/API/FileReader

반응형

'Languages > JS' 카테고리의 다른 글

[Javascript] Function  (0) 2021.06.17
[Javascript] Collections  (0) 2021.06.17
[Javascript] Ajax 모듈  (0) 2021.05.06
[Javascript] Ajax  (0) 2021.04.29
[Javascript] Drag & Drop 파일 업로드  (0) 2021.04.27
Comments