借助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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
Aug 06 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
jquery中get,post和ajax方法的使用小结
Feb 04 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
Mar 01 Javascript
利用JavaScript写一个简单计算器
Nov 27 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
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
php日期操作技巧小结
2016/06/25 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
wxPython学习之主框架实例
2014/09/28 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
软件工程师面试题
2012/06/25 面试题
计算机专业毕业生自荐信
2013/12/31 职场文书
优秀党员主要事迹
2014/01/19 职场文书
暑期研修感言
2014/02/17 职场文书
实习评语大全
2014/04/26 职场文书
2015年项目工作总结
2015/04/29 职场文书
芙蓉镇观后感
2015/06/10 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书