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判断背景图片是否加载成功使用img的width实现
May 29 Javascript
javascript:void(0)的问题使用探讨
Apr 10 Javascript
node.js中的fs.close方法使用说明
Dec 17 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
javascript获取当前的时间戳的方法汇总
Jul 26 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
Vue.js表单控件实践
Oct 27 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
详解JavaScript修改注册表的方法
Jan 05 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
destoon实现调用热门关键字的方法
2014/07/15 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php数组指针操作详解
2017/02/14 PHP
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
Python实现批量修改文件名实例
2015/07/08 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
python频繁写入文件时提速的方法
2019/06/26 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
如何使用repr调试python程序
2020/02/28 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs