jquery
jQuery - Ajax 파일 업로드
AJAX 로 파일을 전송할 수 있는 예제입니다. FormData() 객체는 IE10 부터 사용할 수 있습니다.
test.php 파일에는 아래 내용으로 작성되었다는 가정에서 설명합니다.
요청 코드는 다음과 같습니다.
processData 는 key1=val1&key2=val2 형식의 쿼리 문자열로 전송하는데, 쿼리 문자열로 전송하면 파일 업로드가 되지 않습니다. 따라서 false로 설정해야 하고, contentType 의 기본값은 application/x-www-form-urlencoded 입니다. 기본적으로 파일을 업로드 하려면 ‘multipart/form-data’ 이어야 하므로 false 로 설정합니다. 마지막으로 cache 는 파일을 업로드하는 부분이어서 캐시하지 못하도록 false 로 설정해 주었습니다.
FormData() 객체에 .append() 를 이용해 파일을 전송하는 방법이 있습니다. 여기서 첨부파일 이름은 'user_file' 입니다.
contentType 에 multipart/form-data 를 직접 설정해야 하는 경우 다음과 같습니다.
formData() 는 IE 10부터 지원하기 때문에 아래 방법으로 확인할 수 있습니다.
test.php 파일에는 아래 내용으로 작성되었다는 가정에서 설명합니다.
<?php
print_r($_POST);
print_r($_FILES);
?>
요청 코드는 다음과 같습니다.
<script>
$(function(){
$("button").click(function(){
var isData = new FormData($('#frm')[0]);
$.ajax('test.php', {
processData: false,
contentType: false,
cache: false,
data: isData,
type: 'POST',
success: function(data){
$("#user").html(data);
}
});
});
});
</script>
<form name='frm' id='frm'>
<input name="name" type="text">
<input name="user_file[]" type="file">
</form>
<button>폼 전송</button>
<div id="user"></div>
processData 는 key1=val1&key2=val2 형식의 쿼리 문자열로 전송하는데, 쿼리 문자열로 전송하면 파일 업로드가 되지 않습니다. 따라서 false로 설정해야 하고, contentType 의 기본값은 application/x-www-form-urlencoded 입니다. 기본적으로 파일을 업로드 하려면 ‘multipart/form-data’ 이어야 하므로 false 로 설정합니다. 마지막으로 cache 는 파일을 업로드하는 부분이어서 캐시하지 못하도록 false 로 설정해 주었습니다.
FormData() 객체에 .append() 를 이용해 파일을 전송하는 방법이 있습니다. 여기서 첨부파일 이름은 'user_file' 입니다.
var isData = new FormData($('#frm'));
isData.append('user_file', $("input[type=file]")[0].files[0]);
$.ajax('test.php', {
processData: false,
contentType: false,
cache: false,
data: isData,
type: 'POST',
success: function(data){
$("#user").html(data);
}
});
contentType 에 multipart/form-data 를 직접 설정해야 하는 경우 다음과 같습니다.
var isFrm = document.getElementById('frm');
isFrm.method = "POST";
isFrm.enctype = "multipart/form-data";
var isData = new FormData(isFrm);
formData() 는 IE 10부터 지원하기 때문에 아래 방법으로 확인할 수 있습니다.
if(window.FormData !== undefined){
var isData = new FormData();
...
}
0 댓글