[javascript] jQuery로 AJAX를 이용한 파일 업로드 구현하기

파일 업로드는 웹 애플리케이션에서 자주 사용되는 기능 중 하나입니다. AJAX를 이용하여 파일을 업로드하면 페이지 새로고침 없이 파일을 서버에 전송할 수 있습니다. 이번 글에서는 jQuery를 사용하여 AJAX를 통해 파일을 업로드하는 방법에 대해 살펴보겠습니다.

1. HTML 파일 작성

먼저, HTML 파일을 작성하여 파일 업로드를 위한 화면을 구성합니다. 아래는 간단한 형태의 HTML 코드입니다.

<!DOCTYPE html>
<html>
<head>
    <title>파일 업로드 예제</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="file" id="fileInput">
    <button id="uploadBtn">업로드</button>
    <div id="result"></div>

    <script>
        // AJAX를 이용한 파일 업로드 구현
        // ...
    </script>
</body>
</html>

2. JavaScript로 AJAX 파일 업로드 구현

다음으로, JavaScript를 사용하여 AJAX 파일 업로드를 구현합니다. jQuery의 $.ajax 함수를 사용하여 POST 요청을 보내고, FormData 객체를 사용하여 파일을 포함시킵니다.

$(document).ready(function() {
    $('#uploadBtn').click(function() {
        var fileInput = document.getElementById('fileInput');
        var file = fileInput.files[0];
        var formData = new FormData();
        formData.append('file', file);

        $.ajax({
            url: 'upload.php',
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {
                $('#result').text('파일 업로드 성공: ' + response);
            },
            error: function(xhr, status, error) {
                $('#result').text('파일 업로드 실패: ' + error);
            }
        });
    });
});

3. 서버 측 코드 작성

마지막으로, 서버 측에 파일을 받아서 저장하는 코드를 작성해야 합니다. 위 예시에서는 upload.php 파일을 사용하였으므로, PHP에서 파일을 처리하는 방법에 대해 작성합니다.

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $file = $_FILES['file'];
    $uploadPath = 'uploads/' . basename($file['name']);
    if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
        echo $uploadPath;
    } else {
        http_response_code(500);
        echo '파일 업로드 실패';
    }
} else {
    http_response_code(400);
    echo '잘못된 요청';
}
?>

마치며

이제 jQuery를 사용하여 AJAX를 통해 파일 업로드하는 방법에 대해 알아보았습니다. 이를 통해 페이지 새로고침 없이 파일을 업로드하는 웹 애플리케이션을 구축할 수 있게 되었습니다.