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 相关文章推荐
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
js实现表格筛选功能
Jan 18 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 17 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
JS制作简易计算器的实例代码
Jul 04 Javascript
js实现鼠标点击飘爱心效果
Aug 19 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采集时被封ip的解决方法
2010/08/29 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python实现识别手写数字大纲
2018/01/29 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
自我鉴定书范文
2013/10/02 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python