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 相关文章推荐
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
javascript中clipboardData对象用法详解
May 13 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
JavaScript数组的一些奇葩行为
Jan 25 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
基于vue.js实现购物车
Jan 15 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
PHP新手上路(六)
2006/10/09 PHP
php 日期时间处理函数小结
2009/12/18 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
srcElement表格样式
2006/09/03 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
jquery each()源代码
2011/02/14 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
jQuery使用方法
2017/02/04 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
python实现发送邮件及附件功能
2021/03/02 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
环保倡议书400字
2014/05/15 职场文书
2014年护士长工作总结
2014/11/11 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis