将 Dropzone 文件对象转换为 base64 字符串

converting Dropzone File object to base64 string

我正在尝试使用 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,/, "");
}

现在对于 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));
        });
    }    
});

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

我发现 file.DATAURL 已经有了 base64(不需要上述功能)所以我将 post 我的解决方案在这里:

 $("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);

            });
        }

    });

我使用了不同的方法,因为我在 Ajax 中保存了一个 json 对象。

首先,我声明了一个全局数组。

images = [];

我像这样访问了我的拖放区中的文件,并将它们推送到我的阵列图像中。

 for (var i = 0; i < $animalImage.files.length; i++) {
            images.push($animalImage.files[i]);
        }

其次,我将该数组添加到我的 json 对象(动物)中,用我在模型中期望的信息映射它们(asp.net C#)

 animal.Pictures = $.map(images, function (img) {
            return {
                base64: img.dataURL.replace(/^data:image\/[a-z]+;base64,/, ""),
                fileName: img.name,
                type: img.type
            };
        });

如您所见,我映射了 base64,即我从图像中获得的信息。

希望对您有所帮助。