【问题标题】:Encoding large images into base64 doesn't work将大图像编码为 base64 不起作用
【发布时间】:2017-02-20 10:37:22
【问题描述】:

我正在使用一个简单的表单,它以 base64 字符串的形式将图像发布到我的服务器。当我上传小图像(alert:

HTML:

<form action="/nuevo_cuadro" method="post" accept-charset="utf-8">
    <input id="foto" type="file" name="foto" />
    <button type="submit" class="btn btn-primary" onclick="encodeImageFileAsURL();">Upload</button>
</form>

JS:

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);
    }
}

【问题讨论】:

    标签: javascript string file post base64


    【解决方案1】:

    您是否故意尝试进行两次 HTTP POST 操作?你已经得到了&lt;input type="submit"&gt;,所以只要 JS 函数返回 HTTP 表单 POST 就会执行,你就离开了。如果您更改为&lt;input type="button"&gt;,则表单不会执行帖子,您应该可以开始调试。

    另外,我不确定当您尝试提醒一个几兆字节大的 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);
    }
    

    将按钮更改为类型按钮,而不是提交。

    【讨论】:

    • 是的,我在后端发布了两种不同的方法,因为我使用的是一个非常“测试版”的框架,而且我不知道如何让它变得更好。
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2022-11-30
    • 2016-05-22
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多