由于Edge浏览器不支持new File,所以要先将dataURL转换成blob再转成File,但按照网上程序的转换后,用ajax上传到服务器,在服务器获取到的文件名一直都是blob,而不是设置的文件名,多方查找到发现只要在提交表单append方法后跟文件名就可以了。
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var bstr =atob(arr[1]);
var n = bstr.length;
var u8arr =new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {type: mime });
}
function blobToFile(blob, fileName){
blob.lastModifiedDate =new Date();
blob.name = fileName;
return blob;
}
function dataURLtoFile(dataurl, filename){
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
var blob = dataURLtoBlob(dataurl);
return blobToFile(blob, filename);
}
var file = dataURLtoFile(dataUrl, filename);
formData.append('uploadFile', file, filename);
$.ajax({
url: “upload",
type: "post",
data: formData,
contentType: false,
processData: false,
mimeType: "multipart/form-data",
async: false,
success: function (data, status) {
},
});