테스트 사이트 - 개발 중인 베타 버전입니다

드래그 앤 드롭 파일 업로드(drag & drop) 질문 채택완료

라균 2년 전 조회 2,253

안녕하세요

input 파일을 변경 시 이미지 미리보기는 구현되어있는 상태입니다.

</strong></p>

<pre column-span="none" data-pm-slice="1 1 []" spellcheck="false">
<code data-code-block-language="markup"><label for="reg_file" style="background-image:url(/add_file.png)"></label>
<input type="file" name="reg_file" id="reg_file" class="upload-hidden"
            onchange="upload_preview(this);"></code></pre>

<p column-span="none"><strong>

 

드래그 앤 드롭 파일 업로드(drag & drop) 추가 하기 위한 밑작업은 해두었습니다.

</strong></p>

<pre column-span="none" data-pm-slice="1 1 []" spellcheck="false">
<code data-code-block-language="markup"><div class="input-group" id="drop">
	<div class="filebox">
		<label for="reg_file" style="background-image:url(/add_file.png)"></label>
		<input type="file" name="reg_file" id="reg_file" class="upload-hidden"
            		onchange="upload_preview(this);">
	</div>
</div>

<script>
let $drop = $("#drop");
  $drop.on("dragenter", function (e) {  //드래그 요소가 들어왔을때
    $(this).addClass('drag-over');
  }).on("dragleave", function (e) {  //드래그 요소가 나갔을때
    $(this).removeClass('drag-over');
  }).on("dragover", function (e) {
    e.stopPropagation();
    e.preventDefault();
  }).on('drop', function (e) {  //드래그한 항목을 떨어뜨렸을때
    e.preventDefault();
    $(this).removeClass('drag-over');
    let files = e.originalEvent.dataTransfer.files; //드래그&드랍 항목
    for(let i = 0; i < files.length; i++) {
      if (0 < i) {
        alert("정산에 필요한 영수증 하나만 올려주세요.")
        break;
      }
      let file = files[i];

      // TODO 이미지 미리보기, reg_file에 파일 등록
      $("#reg_file").on('change','#reg_file' , function(){ upload_preview(this); });

    }
  });
</script></code></pre>

<p column-span="none"><strong>

 

현 상황에서 막히는 부분은 'reg_file에 파일 등록'입니다.

input type= 'file' 인 input 파일을 Jquery로 변경하려면 어떻게 해야할까요?

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
2년 전
로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

라균
2년 전
let formData = new FormData($("#formID")[0]);
formData.set('reg_file', file, file.name);
console.log((formData.get('reg_file'))); // 여기에선 값이 확인됩니다.
console.log($("#reg_file").val());// 여기에선 없고, submit에서도 확인이 안됩니다. ㅠㅠ
배르만
2년 전
https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer
이걸로 확인해보세요

[code]
<?php
function printr($arr) {
print('<pre>');
print_r($arr);
print('</pre>');
}

echo 'POST';
printr($_POST);
echo 'FILES';
printr($_FILES);

// $add_file_icon = '/add_file.png';
$add_file_icon = 'https://img.icons8.com/officexs/512/add-file.png';
?>

<style>
#preview {
border: 1px solid #000;
width: 300px;
height: 150px;
margin: 1em 0;
}

#drop {
background-color: #ddd;
height: 5em;
}
</style>

<div id="preview"></div>

<form id="frm" method="post" enctype="multipart/form-data">
<input type="submit" />
<input type="hidden" name="h-1", value="v-1" />
<div class="input-group" id="drop">
<div class="filebox">
<label for="reg_file" style="background-image:url(<?php echo $add_file_icon; ?>)"></label>
<input type="file" name="reg_file" id="reg_file" class="upload-hidden" />
</div>
</div>
<input type="submit" />
</form>

<script src="//code.jquery.com/jquery.min.js"></script>
<script>
let $drop = $("#drop");
$drop.on("dragenter", function (e) { //드래그 요소가 들어왔을때
$(this).addClass('drag-over');
}).on("dragleave", function (e) { //드래그 요소가 나갔을때
$(this).removeClass('drag-over');
}).on("dragover", function (e) {
e.stopPropagation();
e.preventDefault();
}).on('drop', function (e) { //드래그한 항목을 떨어뜨렸을때
e.preventDefault();
$(this).removeClass('drag-over');
let files = e.originalEvent.dataTransfer.files; //드래그&드랍 항목
console.log(files);
for(let i = 0; i < files.length; i++) {
if (0 < i) {
alert("정산에 필요한 영수증 하나만 올려주세요.")
break;
}
let file = files[i];

// set
const dT = new DataTransfer();
dT.items.add(file);
document.getElementById('reg_file').files = dT.files;

// preview
const fr = new FileReader();
fr.onload = upload_preview;
fr.readAsDataURL(file);
}
});

function upload_preview(evt) {
$('#preview').html('<img src="' + evt.target.result + '" height="100%" />');
}
</script>
[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인