Javascript 将大图像编码到base64并不';行不通

Javascript 将大图像编码到base64并不';行不通,javascript,string,file,post,base64,Javascript,String,File,Post,Base64,我使用的是一个简单的表单,它以base64字符串的形式向我的服务器发布一个图像。当我上传小图片(0){ var fileToLoad=fileselected[0]; var fileReader=newfilereader(); fileReader.onload=函数(fileLoadedEvent){ var srcData=fileloadevent.target.result;//您是否有意尝试执行两个HTTP POST操作?您已经得到了,因此,一旦JS函数返回HTTP表单POST,您

我使用的是一个简单的表单,它以base64字符串的形式向我的服务器发布一个图像。当我上传小图片(<500KB)时,它非常适合.jpg和.png文件。但当大小为4 mb时,该函数不执行任何操作,甚至不打印警报:

HTML:


上传
JS:

函数encodeImageFileAsURL(){
var fileselected=document.getElementById(“foto”).files;
var filename=document.getElementById(“foto”).value;
var regex=/.\\\\(.*)/;
var match=regex.exec(文件名);
filename=匹配[1];
如果(fileselected.length>0){
var fileToLoad=fileselected[0];
var fileReader=newfilereader();
fileReader.onload=函数(fileLoadedEvent){

var srcData=fileloadevent.target.result;//您是否有意尝试执行两个HTTP POST操作?您已经得到了
,因此,一旦JS函数返回HTTP表单POST,您就可以执行并退出。如果更改为
,则表单不会执行POST,您应该能够开始调试

此外,我不确定当您尝试发出几兆字节大小的base64编码图像警报时会发生什么

我成功地将你的例子简化为:

function encodeImageFileAsURL() {
    var filesSelected = document.getElementById("foto").files;

    var file = filesSelected[0];

    var reader = new FileReader();

    reader.onload = (function (f) {
        return function (e) {
            alert('***got here***');
        };
    })(file);

    reader.readAsDataURL(file);
}

按钮改为键入按钮,而不是提交。

是的,我在后端发布了两种不同的方法,因为我使用的是一个非常“beta”的框架,而且我不知道如何改进它。
function encodeImageFileAsURL() {
    var filesSelected = document.getElementById("foto").files;
    var filename = document.getElementById("foto").value;

    var regex = /.*\\(.*)/;
    var match = regex.exec(filename);

    filename = match[1];

    if (filesSelected.length > 0) {
        var fileToLoad = filesSelected[0];
        var fileReader = new FileReader();

        fileReader.onload = function(fileLoadedEvent) {
            var srcData = fileLoadedEvent.target.result; // <--- data: base64

            alert(srcData);

            $.ajax({
                type: 'POST',
                url: '/upload/' + filename,
                data: srcData,
                dataType: "text",
                contentType:"text/plain"
            });
        }

        fileReader.readAsDataURL(fileToLoad);
    }
}
function encodeImageFileAsURL() {
    var filesSelected = document.getElementById("foto").files;

    var file = filesSelected[0];

    var reader = new FileReader();

    reader.onload = (function (f) {
        return function (e) {
            alert('***got here***');
        };
    })(file);

    reader.readAsDataURL(file);
}