借助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插件开发 对话框插件开发
Apr 26 Javascript
js防止表单重复提交实现代码
Sep 05 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
基于Jquery实现万圣节快乐特效
Nov 01 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
Vue+axios实现统一接口管理的方法
Jul 23 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
小程序实现图片预览裁剪插件
Nov 22 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
模仿OSO的论坛(三)
2006/10/09 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python实现BackPropagation算法
2017/12/14 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
浅析python继承与多重继承
2018/09/13 Python
详解Python3注释知识点
2019/02/19 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
电厂厂长岗位职责
2014/01/02 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
运动会拉拉队口号
2014/06/09 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
Win11 BitLocker 驱动器加密
2022/04/19 数码科技