반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- spring security 설정
- 붕대 감기 자바
- 오버로딩
- 붕대 감기
- SQL Mapper
- 오버라이딩
- hackerrank
- 객체지향
- over()
- 프로그래머스 붕대 감기
- 프로그래머스
- 멀티프로세싱
- 쿠키
- java
- CPU
- 혼공얄코
- 다형성
- 자바의정석
- contiune
- 중첩 break
- 자바의 정석
- 리눅스
- continue 사용법
- 캡슐화
- 입출력
- 티스토리챌린지
- spring security
- 오블완
- break 사용법
- 멀티태스킹
Archives
- Today
- Total
쉽게 쉽게
[Javascript] 이미지 업로드 본문
반응형
이미지 파일 업로드 시 썸네일도 같이 볼 수 있는 Javascript 코드를 구현했다.
1. 이미지 파일 업로드 HTML
<div id="image_container"></div>
<input type="file" id="image" accept="image/*" onchange="setThumbnail(event);"/>
<input type="file"> 속성 중 accept는 어떤 형식의 파일을 허용할 것인지 정해주는 속성이다.
audio/*, video/*, image/* 처럼 지정하거나
. gif,. jpg,. png처럼 파일 확장자로 지정하는 것도 가능하다.
<input type="file" accept="audio/*">
<input type="file" accept="video/*">
<input type="file" accept="image/*">
<input type="file" accept=".gif, .jpg, .png">
<input type="file" accept="image/gif, image/jpeg, image/png">
만약 이미지가 여러개라면 multiple 속성을 추가해주면 된다.
<div id="image_container"></div>
<input type="file" id="image" accept="image/*" onchange="setThumbnail(event);" multiple/>
2. JS 코드 구현
이미지 썸네일 1개
function setThumbnail(event) {
//FileReader 객체생성
var reader = new FileReader();
//파일읽는것을 성공했을때 실행
reader.onload = function(event) {
var img = document.createElement("img");
img.setAttribute("src", event.target.result);
document.querySelector("#image_container").appendChild(img);
};
//파일 데이터를 URL로 변환
reader.readAsDataURL(event.target.files[0]);
}
이미지 썸네일 여러 개
function setThumbnail(event) {
//for문 추가
for (var image of event.target.files) {
var reader = new FileReader();
reader.onload = function(event) {
var img = document.createElement("img");
img.setAttribute("src", event.target.result);
document.querySelector("#image_container").appendChild(img);
};
reader.readAsDataURL(image);
}
}
3. FileReader 설명
FileReader는 File 또는 Blob 객체를 편리하게 처리할 수 있는 방법을 제공하는 객체다.
*blob 객체 : 주로 이미지, 비디오, 사운드 등과 같은 멀티미디어 객체
FileReader 객체의 가장 핵심적인 속성은 아래와 같다.
- FileReader.error : 읽기 작업에서 발생한 오류를 설명하는 Error 객체를 가지거나 null 값을 가진다.
- FileReader.readyState : FileReader의 상태를 나타내는 숫자
- EMPTY : 0 : 비어있음(Empty)으로 읽기 작업이 수행되지 않았음을 의미. 즉 아직 데이터가 로드되지 않음
- LOADING : 1 : 데이터가 로딩 중
- DONE : 2 : 모든 읽기 요청이 완료됨
- FileReader.result : 파일 읽은 결과를 가지고 있거나 null 값을 가진다.
FileReader 이벤트 핸들러
이벤트 핸들러 | 설명 |
FileReader.onabort | · onabort 이벤트는 읽기 동작이 중단 될 때마다 발생한다. · abort 이벤트의 핸들러 |
FileReader.onerror |
· onerror 이벤트는 읽기 동작에 에러가 생길 때마다 발생한다. · error 이벤트이 핸들러 |
FileReader.onload |
· onload 이벤트는 읽기 동작이 성공적으로 완료 되었을 때마다 발생한다. · load 이벤트 핸들러 |
FileReader.onloadstart | · onloadstart 이벤트는 읽기 동작이 실행 될 때마다 발생한다. · loadstart 이벤트 핸들러 |
FileReader.onloadend |
· onloadend 이벤트는 읽기 동작이 끝났을 때마다 발생한다. ( 읽기의 성공 이나 실패 여부는 상관 없다. ) · loadend 이벤트 핸들러 |
FileReader.onprogress |
· onprogress 이벤트는 Blob를 읽는 동안 호출된다. · progress 이벤트 핸들러 |
이벤트 핸들러 사용예시
1. onloadstart, onloadend
<input type='file' onchange='openFile(event)'>
<script>
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onloadstart = function() {
reader.abort();
};
reader.onloadend = function() {
console.log(reader.error.message);
};
reader.readAsDataURL(input.files[0]);
};
</script>
2. onerror
reader.onerror = function(event){
switch(event.target.error.code){
case error.NOT_FOUND_ERR:
alert("파일을 찾을 수 없습니다.");
break;
case error.SECURITY_ERR:
alert("파일에 변경이 있습니다.");
break;
case error.NOT_READABLE_ERR:
alert("파일 읽을 권한이 없습니다.");
break;
case error.ENCODING_ERR:
alert("파일 허용 용량을 초과하였습니다.");
break;
}
};
3. readyState
<input type='file' onchange='openFile(event)'>
<script>
var stateNames = {};
stateNames[FileReader.EMPTY] = 'EMPTY';
stateNames[FileReader.LOADING] = 'LOADING';
stateNames[FileReader.DONE] = 'DONE';
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
console.log('After load: ' + stateNames[reader.readyState]);
};
console.log('Before read: ' + stateNames[reader.readyState]);
reader.readAsDataURL(input.files[0]);
console.log('After read: ' + stateNames[reader.readyState]);
};
</script>
FileReader 메소드
FileReader 객체 생성 후 네 가지 함수 중 하나를 호출하여 File 또는 Blob를 읽어서 result 속성에 저장한다.
메소드(함수) | 설명 |
readAsText( File 또는 Blob 객체 ) | 파일 객체의 내용을 텍스트로 읽는다. 파일의 내용은 result에 문자열 값으로 들어간다. 즉 파일이 텍스트일때 사용 |
readAsDataURL( File 또는 Blob 객체 ) | 파일 객체를 읽은 후 URL로 변환한다. 즉 바이너리 파일을 읽을때, 사용 (ex.이미지 파일) |
readAsArrayBuffer( File 또는 Blob 객체 ) | 파일 객체의 내용을 배열 버퍼로 읽는다. |
readAsBinaryString( File 또는 Blob 객체 ) | 파일 객체의 내용일 비트 문자열로 읽는다. |
참고
https://www.javascripture.com/FileReader
https://developer-talk.tistory.com/331
https://wickedmagica.tistory.com/235
반응형
'개발공부 > Javascript와 JQuery' 카테고리의 다른 글
[JavaScript] 우편번호 구현 (5) | 2024.10.21 |
---|---|
[JavaScrpit] 특수문자 치환 (0) | 2024.05.31 |
[JavaScript] 쿠키(Cookie) 사용법 (0) | 2024.05.13 |
[Javascript] 공지 팝업창 쿠키 설정 (0) | 2024.05.05 |
[jQuery] ~로 시작하는 선택자 호출하기 (1) | 2024.04.11 |