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 动态数据下的锚点错位问题解决方法
Dec 24 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
Jan 04 Javascript
BootStrapValidator校验方式
Dec 19 Javascript
js选项卡的制作方法
Jan 23 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
实用的Vue开发技巧
May 30 Javascript
微信小程序如何加载数据库真实数据的实现
Mar 04 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
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
Javascript 对象的解释
2008/11/24 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
数控专业自荐书范文
2014/03/16 职场文书
小学班主任评语大全
2014/04/23 职场文书
还款承诺书范文
2014/05/20 职场文书
岗位说明书怎么写
2014/07/30 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
keepalived + nginx 实现高可用方案
2022/12/24 Servers