2,base64 转换成file并上传到服务器上
为什么要把base64转换成file在上传呢?原因很简单,就是base64 太大的话,上传太慢了。
// 把base64 转换成文件对象
function dataURLtoFile(base64Str, fileName) {
var arr = base64Str.split(','),
mime = arr[0].match(/:(.*?);/)[1], //base64解析出来的图片类型
bstr = atob(arr[1]), //对base64串进行操作,去掉url头,并转换为byte atob为window内置方法
len = bstr.length,
ab = new ArrayBuffer(len), //将ASCII码小于0的转换为大于0
u8arr = new Uint8Array(ab); //
while (len--) {
u8arr[len] = bstr.charCodeAt(len)
};
// 创建新的 File 对象实例[utf-8内容,文件名称或者路径,[可选参数,type:文件中的内容mime类型]]
return new File([u8arr], fileName, {
type: mime
})
};
/**
* 文件上传,异步
*/
function uploadfile(file, callback) {
var formFile = new FormData();
formFile.append('file', file);
$.ajax({
type: "POST",
url: _urlIndex + "/file/upload",
data: formFile,
dataType: "json",
cache: false,
contentType: false, //不设置内容类型
processData: false, //不处理数据
success: function (res) {
callback(res)
},
error: function () {
showMsg('上传失败')
}
})
};
// 实际用法
// 把canvasbase64图片转换成文件对象,并上传到服务器
var myfile = dataURLtoFile(image.src, Date.now() + '.png');
uploadfile(myfile, function (res) {
if (res.code == 0) {
$("#loadingBox").fadeOut();
} else {
showMsg(res.msg)
}
})