자바스크립트
업로드할 사진 선택해서 창에 띄우는법.
jdy8739
2022. 1. 2. 18:38
uploadImg(event) {
let images = event.target.files;
console.log(images);
let urls = [];
for(let image of images) {
//console.log(image.type)
if(image.type.includes('image')) {
urls.push(URL.createObjectURL(image));
} else {
alert('Image file is only uploadable!');
return false;
}
}
this.mainImage = urls[0];
this.images = urls.splice(1, urls.length);
this.step = 1;
}
위 메소드 첫 번째 줄처럼

선택한 이미지파일들을 변수에 담아둘 수 있다.
그 변수를 출력하면...

이렇게 FileList라는 오브젝트 배열을 닮은 자료형으로 출력된다.
선택된 이미지파일들을 업로드하기 전에 창에 띄우려면
이미지 url을 만들어줘야하는데,
방금 출력한 FileList를 임시 이미지 url로 만들 수 있는 두 가지 방법이 있다.
1)
FileReader()를 쓰는 방법은 이미지를 텍스트로 변환할 수 있다.
2)
URL.createObjectURL()로 가상 url을 만들어줄 수 있다.
위 방법은 2번으로 진행했다.
FileList를 인덱싱해 URL.createObjectURL() 에 인자로 하나씩 집어넣으면...
앞에 'blob'라는게 붙은 url이 생성된다.
이건 Binary Large Object라는 뜻인데, 기본적으로 컴퓨터는 모든 파일을 2진법으로 저장하기에,
저런 형식이 붙는다고 생각하면된다.
그리고 생성된 url을
:style="{ backgroundImage: `url(${ url })` }"
이렇게 넣어주면된다.
또 사용자가 선택한 파일이 이미지 파일인지 체크해야한다.
태그에 저렇게 넣으면 파일 선택 팝업창에서 image파일들만 보여준다.
하지만 선택까지 막을 수는 없는데,
if(image.type.includes('image')) {
이렇게 변수에 할당된 이미지 파일에 .type을 해주면,
어떤 타입인지 알려준다.
이미지가 맞으면,
image/png나 image/jpg 이렇게 나오고
아니면 밑처럼 이상하게 나온다.