借助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代码
Aug 29 Javascript
比Jquery的document.ready更快的方法
Apr 28 Javascript
jQuery源码分析之Event事件分析
Jun 07 Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
微信公众号 摇一摇周边功能开发
Dec 08 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
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实现手机归属地查询API接口实现代码
2012/08/27 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
JSON取值前判断
2014/12/23 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
python中去空格函数的用法
2014/08/21 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python制作动态字符图的实例
2019/01/27 Python
python标记语句块使用方法总结
2019/08/05 Python
Django--权限Permissions的例子
2019/08/28 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
物流业务员岗位职责
2014/02/08 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
北京青年观后感
2015/06/15 职场文书
在js中修改html body的样式
2021/11/11 Javascript
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server