借助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模拟LCD 时钟的html文件源代码
Jun 16 Javascript
Javascript变量的作用域和作用域链详解
Apr 02 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
Javascript自定义事件详解
Jan 13 Javascript
javascript深拷贝和浅拷贝详解
Feb 14 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
js实现图片无缝循环轮播
Oct 28 Javascript
Js数组扁平化实现方法代码总汇
Nov 11 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笔试题
2009/08/04 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
Jquery插件写法笔记整理
2012/09/06 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
深入理解Django的中间件middleware
2018/03/14 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python实现名片管理系统
2018/11/29 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
面试后的英文感谢信
2014/02/01 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
预备党员半年考察意见
2015/06/01 职场文书
2015年中秋节主持词
2015/07/30 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
培训心得体会怎么写
2016/01/25 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python