위토즈 - 개발자프로그램판매공간

정보공유

[JQUERY] php 와 ajax 를 이용해서 파일 업로드 할때 대용량 파일을 업로드 하는 방법


1. 서버 설정


; 파일 업로드 크기 제한

upload_max_filesize = 100M

; POST 데이터의 최대 크기

post_max_size = 100M

; 최대 실행 시간 (초)

max_execution_time = 300

; 최대 입력 시간 (초)

max_input_time = 300

; 메모리 제한

memory_limit = 128M





2. 클라이언트 측 (AJAX 및 JavaScript) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Large File Upload</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="upload.js"></script>
</head>
<body>
    <input type="file" id="fileInput">
    <button onclick="uploadFile()">Upload</button>
</body>
</html>



JavaScript (upload.js) 

function uploadFile() {
    const fileInput = $('#fileInput')[0];
    const file = fileInput.files[0];
    const chunkSize = 1024 * 1024; // 1MB
    const totalChunks = Math.ceil(file.size / chunkSize);

    let currentChunk = 0;

    function uploadChunk() {
        const start = currentChunk * chunkSize;
        const end = Math.min(start + chunkSize, file.size);
        const chunk = file.slice(start, end);

        const formData = new FormData();
        formData.append('file', chunk);
        formData.append('chunkNumber', currentChunk);
        formData.append('totalChunks', totalChunks);

        $.ajax({
            url: 'upload.php',
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function (response) {
                currentChunk++;
                if (currentChunk < totalChunks) {
                    uploadChunk();
                } else {
                    console.log('Upload complete');
                }
            },
            error: function () {
                console.error('Upload failed');
            }
        });
    }

    uploadChunk();
}






3. 서버 측 (PHP) 

<?php
$targetDir = "uploads";
if (!file_exists($targetDir)) {
    mkdir($targetDir, 0777, true);
}

$chunkNumber = isset($_POST['chunkNumber']) ? intval($_POST['chunkNumber']) : 0;
$totalChunks = isset($_POST['totalChunks']) ? intval($_POST['totalChunks']) : 0;

if (isset($_FILES['file']['tmp_name'])) {
    $filePath = $targetDir . DIRECTORY_SEPARATOR . $_FILES['file']['name'] . '.part' . $chunkNumber;
    move_uploaded_file($_FILES['file']['tmp_name'], $filePath);
}

if ($chunkNumber == $totalChunks - 1) {
    $finalFilePath = $targetDir . DIRECTORY_SEPARATOR . $_FILES['file']['name'];
    $fp = fopen($finalFilePath, 'w');

    for ($i = 0; $i < $totalChunks; $i++) {
        $chunkPath = $targetDir . DIRECTORY_SEPARATOR . $_FILES['file']['name'] . '.part' . $i;
        $chunk = fopen($chunkPath, 'r');
        while ($line = fread($chunk, 1024)) {
            fwrite($fp, $line);
        }
        fclose($chunk);
        unlink($chunkPath);
    }

    fclose($fp);
    echo json_encode(["status" => "success"]);
}
?>








정보공유
Total 467건 1 페이지
번호 제목 글쓴이 날짜 조회
467 HTML 파일을 CSS가 적용된 PDF로 변환하여 서버에 저장하는 PHP 코드 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-06 333
466 phpMyAdmin 접속이 안될때, db 아이피 포트번호 다를때. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-18 942
465 실패되었습니다.[연동오류(PHP SOAP 모듈설치 필요)] 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-10 1,079
464 csv 파일 만들때 제일많이 하는 실수!! 필드에 , 가 있는경우 변환이 제대로 안된다. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-01 1,258
463 GROUP_CONCAT 길이 제한 때문에 결과값을 다 못가져오는 경우 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-26 1,304
462 회원아이디 자동 생성 함수 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-20 1,415
461 중앙 토스트 레이어 , 버튼을 클릭하면 화면 중앙에 3초간 보였다가 fadeout 되는 레이어창. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-19 1,410
460 관리자 권한이 super 아니고 관리권한설정을 부여받은 회원이 관리자 화면에 접속했을때 부여받은 메뉴로 바로 접속되도록 처리 (2) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 1,511
459 관리자 권한이 super 아니고 관리권한설정을 부여받은 회원이 관리자 화면에 접속했을때 부여받은 메뉴로 바로 접속되도록 처리 (1) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 1,445
458 SQL 주입 방지 Prepared Statement 의 생활화 mysqli PDO 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 1,322
457 크로스 사이트 스크립팅(XSS) 테스트 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-12 1,470
456 2일전부터 오늘까지의 데이터 정보 가져오기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-05 1,426
455 text input 박스 에 휴대폰번호 입력할때 자동으로 하이픈 넣기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-18 1,648
454 주소 정보 입력시 다음우편번호 스크립트를 사용할때 배열처리 할 경우 오류 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-11 1,839
453 자바스크립트를 이용해서 버튼 클릭시 이미지로 저장하는 방법 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-30 2,328