利用FileReader将文件转为Base64并通过AJAX上传

作者:清欢时间:2026-10-30 03:35:20浏览:125

传统AJAX无法直接上传文件,通常依赖iframe实现异步提交。本文介绍利用JavaScript的FileReader对象将文件编码为Base64字符串,再通过AJAX以普通表单参数形式发送至服务器。该方法代码简洁,适用于IE10及以上主流浏览器的小范围应用,能有效简化文件上传逻辑。

AJAX上传文件的传统局限与替代方案

AJAX技术本身不支持直接上传文件,常规做法是创建一个隐藏的iframe,在其中执行表单提交操作,从而实现文件的异步上传效果。

虽然这种方式能较好地兼容各类浏览器,但实现代码较为繁琐。即便借助如plupload等文件上传插件,开发工作量依然不小。

灵光一闪,利用javascript的FileReader对象将文件编码成base64再传服务器不就行了么~

思路明确:利用JavaScript的FileReader对象将文件编码为Base64格式,随后传输至服务器即可。

前端Base64编码与AJAX传输实现

前端实现文件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>

后端Base64解码与文件保存

后端接收文件数据,进行解码并保存至指定路径:


<?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);
}

浏览器兼容性与适用场景分析

主流浏览器及IE10以上版本均支持JavaScript中的FileReader对象。在面向小范围用户的服务场景中,这种异步上传文件的方式既省时又省力;若需兼容旧版IE系列,则需另行考虑其他方案。

作者最新文章