将 Dropzone File 对象转换为 base64 字符串

Chr*_*ian 3 javascript jquery dropzone.js

我正在尝试使用 JSON 发送 Dropzone 文件,因此我想将图像解码为 base64 我尝试了此功能:

function getBase64Image(imgElem) {
    var canvas = document.createElement("canvas");
    canvas.width = imgElem.clientWidth;
    canvas.height = imgElem.clientHeight;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(imgElem, 0, 0);
    var dataURL = canvas.toDataURL("image/png");
    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
Run Code Online (Sandbox Code Playgroud)

现在对于 Dropzone 我写这个来测试 base64 转换器

$("form#dropzone").dropzone({
    url: allPaths.baseUrl + 'Services/PictureUpload.asmx/HandleFileDropped',
    uploadMultiple: true,
    autoProcessQueue: false,
    acceptedFiles: "image/*",
    init: function() {
        this.on("addedfile", function(file) {
            console.log(getBase64Image(file));
        });
    }    
});
Run Code Online (Sandbox Code Playgroud)

我收到文件对象无效的错误

Chr*_*ian 7

我发现 file.DATAURL 已经有 base64 (不需要上述函数),所以我将在这里发布我的解决方案:

 $("form#dropzone").dropzone({
        url: allPaths.baseUrl + 'Services/PictureUpload.asmx/HandleFileDropped',
        uploadMultiple: true,
        autoProcessQueue: false,
        acceptedFiles: "image/*",
        init: function() {
            this.on("addedfile", function (file) {
                var reader = new FileReader();
                reader.onload = function(event) {
                    // event.target.result contains base64 encoded image
                    var base64String = event.target.result;
                    var fileName = file.name
                    handlePictureDropUpload(base64String ,fileName );
                };
                reader.readAsDataURL(file);

            });
        }

    });
Run Code Online (Sandbox Code Playgroud)