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变量作用域使用中常见错误总结
Mar 26 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
Bootstrap基本组件学习笔记之分页(12)
Dec 08 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
BootstrapTable加载按钮功能实例代码详解
Sep 22 Javascript
node.js 用socket实现聊天的示例代码
Oct 17 Javascript
详解jquery和vue对比
Apr 16 jQuery
Vue组件基础用法详解
Feb 05 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
js module大战
2019/04/19 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
python快速排序代码实例
2013/11/21 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python之列表实现栈的工作功能
2019/01/28 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
园林技术专业求职信
2014/07/28 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
军事博物馆观后感
2015/06/05 职场文书
大学生十八大感想
2015/08/11 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
2016八一建军节慰问信
2015/11/30 职场文书