JQuery 다중 파일 업로드시 미리 보기 제공하기.
JQuery 다중 파일 업로드시 미리보기 삭제하기.
JQuery 다중 파일 업로드시 POST 전송.
JQuery 다중 파일 업로드시 서버에 파일 전송.
완성 코드 버전입니다.
https://greatps1215.tistory.com/31
저번 포스팅에 이어서 이번엔 다중 파일 업로드 과정에 대해서 포스팅 해봅니다.
1. 다중 파일 선택시 미리보기 제공
2. 다중 파일 미리보기에서 특정 이미지만 삭제하기
3. 다중 파일 POST 전송
4. 다중 파일 서버 디렉토리로 업로드하기
순으로 진행될 예정입니다.
전체 소스코드는 압축해서 올리도록 하겠습니다.
아래는 body부분입니다 한번 보시고 포스팅을 보시는게 이해하는데 도움이 되실 겁니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <body> <div> <h2><b>이미지 미리보기</b></h2> <div class="input_wrap"> <a href="javascript:" onclick="fileUploadAction();" class="my_button">파일 업로드</a> <input type="file" id="input_imgs" multiple/> </div> </div> <div> <div class="imgs_wrap"> <img id="img" /> </div> </div> <a href="javascript:" class="my_button" onclick="submitAction();">업로드</a> </body> | cs |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <script type="text/javascript"> // 이미지 정보들을 담을 배열 var sel_files = []; $(document).ready(function() { $("#input_imgs").on("change", handleImgFileSelect); }); function fileUploadAction() { console.log("fileUploadAction"); $("#input_imgs").trigger('click'); } function handleImgFileSelect(e) { // 이미지 정보들을 초기화 sel_files = []; $(".imgs_wrap").empty(); var files = e.target.files; var filesArr = Array.prototype.slice.call(files); var index = 0; filesArr.forEach(function(f) { if(!f.type.match("image.*")) { alert("확장자는 이미지 확장자만 가능합니다."); return; } sel_files.push(f); var reader = new FileReader(); reader.onload = function(e) { var html = "CONTENT"; $(".imgs_wrap").append(html); index++; } reader.readAsDataURL(f); }); } </script> | cs |
1 | var html = "<a href=\"javascript:void(0);\" onclick=\"deleteImageAction("+index+")\" id=\"img_id_"+index+"\"><img src=\"" + e.target.result + "\" data-file='"+f.name+"' class='selProductFile' title='Click to remove'></a>"; | cs |
위의 소스코드는 위에 생략한 CONTENT 내용입니다.
풀어서 설명 드리면 a태그로 감싸고 안에 img태그를 삽입하였습니다.
완성된 html코드는 imgs_wrap에 삽입하였습니다.
a태그에 대해 조금더 이해해보실 필요가 있습니다.
다음 항목에 설명할 이미지를 선택하면 여러 미리보기 이미지들 중에 선택된 이미지만 삭제가 되기 위해
onclick을 속성으로 연결하였고, 해당 function에는 index로 이미지들을 구별할 수 있는 고유값을 매개변수로 전달해줍니다.
물론 a태그에도 id 속성값을 주어서 script로 해당 a 태그를 삭제할 수 있도록 하였습니다.
2. 다중 파일 미리보기에서 특정 이미지만 삭제하기
1번의 예제에서 보여졌듯이 여러 이미지들을 파일업로드 버튼을 통해 실행하게 되면, 위의 내용과 같이 선택된 이미지들이 나열 됩니다.
특정 이미지를 삭제하는 함수는 위에 1번 항목에서 Line36의 내용을 참고 하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 | <script type="text/javascript"> function deleteImageAction(index) { console.log("index : "+index); sel_files.splice(index, 1); var img_id = "#img_id_"+index; $(img_id).remove(); console.log(sel_files); } </script> |
3. 다중 파일 POST 전송
선택된 이미지들을 이제 서버로 업로드를 해봐야합니다.
화면에 보이는 업로드 버튼을 누르게 되면 서버로 보내는 POST관련 함수가 작동을 해야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <script type="text/javascript"> function submitAction() { var data = new FormData(); for(var i=0, len=sel_files.length; i<len; i++) { var name = "image_"+i; data.append(name, sel_files[i]); } data.append("image_count", sel_files.length); var xhr = new XMLHttpRequest(); xhr.open("POST","./study01_af.php"); xhr.onload = function(e) { if(this.status == 200) { console.log("Result : "+e.currentTarget.responseText); } } xhr.send(data); } </script> | cs |
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 | <?php $imageKind = array ('image/pjpeg', 'image/jpeg', 'image/JPG', 'image/X-PNG', 'image/PNG', 'image/png', 'image/x-png'); $dir = "./imgs/"; for($i=0; $i<$_POST['image_count']; $i++) { $image_id = "image_".$i; $image_file = time().$i.".jpg"; if(isset($_FILES[$image_id]) && !$_FILES[$image_id]['error']) { if(in_array($_FILES[$image_id]['type'], $imageKind)) { if(move_uploaded_file($_FILES[$image_id]['tmp_name'], $dir.$image_file)) { echo "Success Upload Image <br/>"; } else { echo "Error Upload Image <br/>"; } } else { echo "Not Image Type <br/>"; } } else { echo "Image Upload Fail <br/>"; } } ?> | cs |
#Jquery다중이미지미리보기#Jquery다중이미지업로드#Jquery다중이미지삭제#Jquery다중이미지서버업로드
지금 까지 댓글로 피드백들을 많이 주셔서 오류가 있거나 수정해야될 부분이 있는 경우 수정하였습니다.
컨텐츠 내에는 바뀐건 없지만 zip파일에는 반영이 되어있으니 참고바랍니다!
댓글 피드백은 확인 후 진행하겠습니다.
'개발 > HTML, CSS, Script' 카테고리의 다른 글
드랍다운 메뉴 (0) | 2017.09.30 |
---|---|
슬라이드 메뉴, 슬라이딩 메뉴 (0) | 2017.09.30 |
이미지 반복 롤링 배너 (7) | 2017.09.24 |
[Part1] Jquery 파일 업로드시 미리보기 제공하기, 다중 파일 업로드 미리보기 제공하기 (18) | 2017.05.15 |
CSS 콘텐츠 수직정렬하기 (0) | 2017.05.04 |