利用FileReader将文件转为Base64并通过AJAX上传
传统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系列,则需另行考虑其他方案。
JS转整数出现NaN怎么办?常见异常处理方案
2026-11-05 16:27:31
推荐几款免安装的在线JS压缩工具
2026-11-05 14:54:53
JS怎么使用JSON.stringify实现JSON格式化与缩进
2026-11-04 10:47:30
CodePen、JSFiddle 与 StackBlitz:主流 JS 在线编辑器对比
2026-11-03 21:07:49
JS字符串转数字后怎么正确判断是否为有效数值
2026-11-03 20:04:15
