借助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 相关文章推荐
jquery URL参数判断,确定菜单样式
May 31 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
JavaScript针对网页节点的增删改查用法实例
Feb 02 Javascript
jQuery获取及设置表单input各种类型值的方法小结
May 24 Javascript
JS中作用域和变量提升(hoisting)的深入理解
Oct 31 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
每天学点Vue源码之vm.$mount挂载函数
Mar 11 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 Javascript
JS如何生成随机验证码
Mar 02 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 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堆排序(heapsort)练习
2013/11/13 PHP
php bootstrap实现简单登录
2016/03/08 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
一些实用的jQuery代码片段收集
2011/07/12 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
如何处理简单的PHP错误
2015/10/14 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
什么是servlet
2012/05/08 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
大学社团计划书
2014/05/01 职场文书
2014年党总支工作总结
2014/12/18 职场文书
学生保证书
2015/01/16 职场文书
第一节英语课开场白
2015/06/01 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL