Base64到文件图像提交仅在Safari中失败

时间:2018-02-15 20:39:05

标签: javascript ajax file safari base64

我有一个应用程序将想象存储到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服务。

0 个答案:

没有答案