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 相关文章推荐
document.all与WEB标准
May 13 Javascript
12种不宜使用的Javascript语法整理
Nov 04 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
JS冒泡事件的快速解决方法
Dec 16 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
electron中使用bootstrap的示例代码
Nov 06 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
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
财务部总监岗位职责
2014/03/12 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
结婚通知短信大全
2015/04/17 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
小学生表扬稿范文
2015/05/05 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL