>웹 프론트엔드 >JS 튜토리얼 >FileReader를 사용하여 파일을 Base64로 인코딩한 다음 AJAX_javascript 기술을 통해 업로드합니다.

FileReader를 사용하여 파일을 Base64로 인코딩한 다음 AJAX_javascript 기술을 통해 업로드합니다.

WBOY
WBOY원래의
2016-05-16 15:23:501513검색

AJAX를 사용하여 파일을 직접 업로드할 수는 없습니다. 일반적으로 새 iframe을 만들고 그 안에서 양식 제출 프로세스를 완료하면 비동기식 파일 업로드 효과를 얻을 수 있습니다.
이렇게 하면 더 나은 브라우저 호환성을 얻을 수 있지만 plupload와 같은 파일 업로드 플러그인을 사용하더라도 코드의 양이 상대적으로 커집니다.

어떻게 유연성을 확보할 수 있나요? 일반 AJAX 제출 양식 데이터와 마찬가지로 파일을 일반 양식 매개변수로 처리할 수 있다면 얼마나 좋을까요?

JavaScript의 FileReader 객체를 사용하여 파일을 base64로 인코딩한 후 서버로 전송하면 되지 않을까 하는 생각이 들었어요~

행동을 시작하고 음식과 의복을 충분히 확보하세요.

프런트 엔드 base64는 파일을 인코딩하고 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>

백엔드는 파일 데이터를 디코딩하고 저장합니다.

<&#63;php

if (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 개체는 모든 주류 브라우저에서 지원되며 IE10 이상에서 지원됩니다. 개인적으로 이러한 비동기식 파일 업로드 방법은 소규모 서비스를 제공할 때 고려할 수 있어 시간과 노력을 절약할 수 있다고 생각합니다. IE 시리즈와의 호환성은 또 다른 문제입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.