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 相关文章推荐
javascript中的prototype属性实例分析说明
Aug 09 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
手把手教你实现 Promise的使用方法
Sep 02 Javascript
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
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
php session安全问题分析
2011/06/24 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
PHP 图片处理
2020/09/16 PHP
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
了解重排与重绘
2019/05/29 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
顶撞领导检讨书
2014/01/29 职场文书
诚信承诺书范文
2014/03/27 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
住房抵押登记委托书
2014/09/27 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
小学教师教学随笔
2015/08/14 职场文书
2016入党心得体会范文
2016/01/06 职场文书