借助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 相关文章推荐
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
js jquery验证银行卡号信息正则学习
Jan 21 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
jQuery Pagination分页插件使用方法详解
Feb 28 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
详细分析单线程JS执行问题
Nov 22 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 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环境――Appserv
2006/12/13 PHP
PHP实现验证码校验功能
2017/11/16 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
javascript正则表达式总结
2016/02/29 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python爬取内容存入Excel实例
2019/02/20 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
魅力教师事迹材料
2014/01/10 职场文书
小学生打架检讨书
2014/01/26 职场文书
先进集体事迹材料
2014/02/17 职场文书
护士求职自荐信范文
2014/03/19 职场文书
教师一岗双责责任书
2014/04/16 职场文书
应届生求职信范文
2014/05/26 职场文书
财务管理专业求职信
2014/06/11 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python