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 相关文章推荐
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
AngularJS入门教程之表单校验用法示例
Nov 02 Javascript
js下载文件并修改文件名
May 08 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
解决vue热替换失效的根本原因
Sep 19 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
如何通过JS实现日历简单算法
Oct 14 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将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
js资料prototype 属性
2007/03/13 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
对numpy中轴与维度的理解
2018/04/18 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
医疗专业毕业生求职信
2014/08/28 职场文书
社区助残日活动总结
2014/08/29 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
现役军人家属慰问信
2015/03/24 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis