我有一个应用程序将想象存储到IndexedDB中作为Base64字符串。然后,当我提交表单时,字符串被解释为一个文件,然后通过AJAX发送。这可以使用Firefox工作正常,但在Safari中不起作用。我没有收到错误,只是将0 KB文件发送到该文件夹。
getImageFromDB(imageRef,function (imageVal) {
var fileSvc = encodeURI("files/UploadFile")
var imgFile = dataURLtoFile(imageVal, imageRef+".jpg");
urltoFile(imageVal, imageRef+".jpg", 'image/jpg')
.then(function(imgFile){
var formData = new FormData();
formData.append('file', imgFile);
$.ajax({
url: fileSvc,
type: "POST",
cache: false,
contentType: false,
processData: false,
data: formData
});
})
});
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);
}
return new File([u8arr], filename, {type:mime});
}
为什么这适用于Firefox而不适用于Safari(macOS和iOS版本)?
我知道我可以尝试将数据作为BLOB发送,但我希望不必更改现有的期望文件的Web服务。