借助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 相关文章推荐
js 格式化时间日期函数小结
Mar 20 Javascript
jQuery代码优化 选择符篇
Nov 01 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
Aug 05 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
bootstrap时间插件daterangepicker使用详解
Oct 19 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 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
第四章 php数学运算
2011/12/30 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
javascript动态加载实现方法一
2012/08/22 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
vue bootstrap小例子一枚
2017/06/09 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python求pi的方法
2014/10/08 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python 中@property的用法详解
2020/01/15 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
上班睡觉检讨书
2014/01/09 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
困难补助申请报告
2015/05/19 职场文书
爱国主题班会教案
2015/08/14 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server