借助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 相关文章推荐
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
jQuery中extend函数详解
Feb 13 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
Mar 04 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
js实现开关灯效果
Mar 30 Javascript
javascript 代码是如何被压缩的示例代码
May 06 Javascript
JavaScript 实现下雪特效的示例代码
Sep 09 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入门速成(2)
2006/10/09 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
php while循环得到循环次数
2013/10/26 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
Python json模块使用实例
2015/04/11 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
python3学生名片管理v2.0版
2018/11/29 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
高级Java程序员面试要点
2013/08/02 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
毕业生个人求职的自我评价
2013/10/28 职场文书
大客户销售经理职责
2013/12/04 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
一月红领巾广播稿
2014/02/11 职场文书
机械工程师岗位职责
2014/06/16 职场文书
小学课外活动总结
2014/07/09 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS