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 相关文章推荐
关于__defineGetter__ 和__defineSetter__的说明
May 12 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python实现的爬虫功能代码
2017/06/24 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
解决python "No module named pip" 的问题
2018/10/13 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
销售经理岗位职责
2014/03/16 职场文书
产品质量承诺书范文
2014/03/27 职场文书
大专生求职信
2014/06/29 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
入党培养人考察意见
2015/06/08 职场文书
初中班干部工作总结
2015/08/10 职场文书
python 逐步回归算法
2021/04/06 Python