파일 을 base 64 로 인 코딩 해서 AJAX 를 통 해 업로드 합 니 다.

AJAX 를 사용 하면 파일 을 직접 업로드 할 수 없습니다. 보통 새 iframe 이 폼 을 제출 하 는 과정 을 완성 하여 비동기 로 파일 을 업로드 하 는 효 과 를 얻 습 니 다.
이렇게 하면 비교적 좋 은 브 라 우 저 호환성 을 얻 을 수 있 지만 코드 의 양 이 비교적 클 것 입 니 다. 예 를 들 어 plplpload 와 같은 파일 업로드 플러그 인 을 사용 하 더 라 도.
어떻게 하면 유연 할 수 있 을 까? 일반적인 AJAX 가 폼 데 이 터 를 제출 하 는 것 처럼 파일 을 일반 폼 매개 변수 로 볼 수 있 었 으 면 좋 겠 다.
자 바스 크 립 트 의 FileReader 대상 을 이용해서 파일 을 base 64 로 인 코딩 해서 서버 에 전송 하면 되 잖 아 요 ~
손 을 쓰기 시작 하여 의식 이 풍족 하 다.
전단 에서 파일 을 base 64 인 코딩 하고 ajax 를 통 해 서버 로 전송 합 니 다:
<head>
    <meta charset="UTF-8"></head><form onsubmit="return false;">
    <input type="hidden" name="file_base64" id="file_base64">
    <input type="file" id="fileup">
    <input type="submit" value="submit" onclick="$.post('./uploader.php', $(this).parent().serialize());"></form><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script>$(document).ready(function(){
    $("#fileup").change(function(){
        var v = $(this).val();
        var reader = new FileReader();
        reader.readAsDataURL(this.files[0]);
        reader.onload = function(e){
            console.log(e.target.result);
            $('#file_base64').val(e.target.result);
        };
    });
});</script>

백 엔 드 에서 파일 데 이 터 를 디 코딩 하고 저장 합 니 다:
<?phpif (isset($_POST['file_base64'])){
    $file_base64 = $_POST['file_base64'];
    $file_base64 = preg_replace('/data:.*;base64,/i', '', $file_base64);
    $file_base64 = base64_decode($file_base64);

    file_put_contents('./file.save', $file_base64);}

javascript 의 FileReader 대상 주류 브 라 우 저 는 모두 지원 합 니 다. IE 10 이상 의 지원 은 작은 범위 에서 서 비 스 를 제공 할 때 이 비동기 로 파일 을 업로드 하 는 방식 을 고려 할 수 있 고 시간 도 절약 할 수 있 으 며 IE 시 리 즈 를 호 환 할 수 있다 고 생각 합 니 다.

좋은 웹페이지 즐겨찾기