由於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) {
},
});