JavaScript将base64图片转换成formData并通过AJAX提交的实现方法


Posted in Javascript onOctober 24, 2016

之前为了拍摄照片使用了webcam相关的插件,其拍摄后得到的是base64格式的图片,直接显示没问题,在src中直接指定就可以了,但是要上传到server时问题就来了,server端接收的是标准的文件,也就是html form中type=”file”的形式。想要沿用这个接口不更改server端代码,于是尝试将base64直接转换成标准的fomeData并通过AJAX提交。

第一步,将base64转换成二进制图片(Blob)

主要思路是整理一下base64的前面几个字符,预处理以后转换成Blob对象,这个之后稍作处理可以放在formData中。

function dataURItoBlob(base64Data) {
var byteString;
if (base64Data.split(',')[0].indexOf('base64') >= 0)
byteString = atob(base64Data.split(',')[1]);
else
byteString = unescape(base64Data.split(',')[1]);
var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}

第二步,构建formData

这里需要借助html5的canvas

var blob = dataURItoBlob(imageBase64); // 上一步中的函数
var canvas = document.createElement('canvas');
var dataURL = canvas.toDataURL('image/jpeg', 0.5);
var fd = new FormData(document.forms[0]);
fd.append("the_file", blob, 'image.png');

上面的the_file为这个文件的key,等效于input中的name,image.png则是文件名,由于base64的图片信息是不带文件名的,所以可以手动指定一个,这个参数是可选的

第三步,使用AJAX提交

为方便,这里使用jQuery的Ajax来演示,上面我们已经构建好了名为fd的formData,直接提交即可

$.ajax({
url: 'http://www.example.com/upload',
method: 'POST',
processData: false, // 必须
contentType: false, // 必须
dataType: 'json',
data: fd,
success(data) {
console.log(data);
}
});

以上所述是小编给大家介绍的JavaScript将base64图片转换成formData并通过AJAX提交的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
Vue中父子组件通讯之todolist组件功能开发
May 21 Javascript
深入浅析AngularJs模版与v-bind
Jul 06 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
Sep 14 Javascript
Vue组件通信的几种实现方法
Apr 25 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
Jul 29 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
JS async 函数的含义和用法实例总结
Apr 08 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 #Javascript
JavaScript reduce和reduceRight详解
Oct 24 #Javascript
js在ie下打开对话窗口的方法小结
Oct 24 #Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 #Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 #Javascript
PHP捕捉异常中断的方法
Oct 24 #Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 #Javascript
You might like
Zend引擎的发展 [15]
2006/10/09 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
javascript 回调函数详解
2014/11/11 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
JS执行控制之节流模式实例分析
2018/12/21 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
Python中的引用和拷贝浅析
2014/11/22 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
金融事务专业求职信
2014/04/25 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
企业务虚会发言材料
2014/10/20 职场文书
儿园租房协议书范本
2014/12/02 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL