借助FileReader实现将文件编码为Base64后通过AJAX上传


Posted in Javascript onDecember 24, 2015

使用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>

后端对文件数据解码并保存:

<?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系列另当别论。

Javascript 相关文章推荐
采用call方式实现js继承
May 20 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
JS实现的类似微信聊天效果示例
Jan 29 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
Openlayers绘制地图标注
Sep 28 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 #Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 #Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 #Javascript
基于JS2Image实现圣诞树代码
Dec 24 #Javascript
jquery读写cookie操作实例分析
Dec 24 #Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 #Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 #Javascript
You might like
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP模板解析类实例
2015/07/09 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Python restful框架接口开发实现
2020/04/13 Python
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
建龙钢铁面试总结
2014/04/15 面试题
法律专业个人实习自我鉴定
2013/09/23 职场文书
社区义诊活动总结
2014/04/30 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
浅析Python中的随机采样和概率分布
2021/12/06 Python
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript