图片FormData上传
var base64String = /*base64图片串*/; //这里对base64串进行操作,去掉url头,并转换为byte var bytes = window.atob(base64String.split(',')[1]); //处理异常,将ASCII码小于0的转换为大于0,这里有两种写法 第一种: var ab = new ArrayBuffer(bytes.length); var ia = new Uint8Array(ab); for(var i = 0; i < bytes.length; i++){ ia[i] = bytes.charCodeAt(i); //这里有点疑惑,ia是怎么改变ab的?注:① } //Blob对象 var blob = new Blob([ab], {type: 'image/jpeg'}); //type为图片的格式 //FormData对象 var fd = new FormData(); //TDOD Ajax或者其他方式上传FormData对象 //FormData对象接受三个参数,第三个参数为文件名,通常我们只传前两个参数,第三个参数不传则使用默认文件名,这里使用的Blob对象,所以需要一个文件名,用时间戳代替。 fd.append('file',blob, Date.now() + '.jpg'); 第二种: var array = []; for(var i = 0; i < bytes.length; i++){ array.push(bytes.charCodeAt(i)); } var blob = new Blob([new Uint8Array(array)], {type: 'image/jpeg'}); var fd = new FormData(); fd.append('file',blob, Date.now() + '.jpg'); //TDOD Ajax或者其他方式上传FormData对象
原理:利用ArrayBuffer、Blob和FormData进行图片上传