将base64转换为blob,然后放回输入文件

时间:2019-07-23 06:52:14

标签: javascript

我正在使用以下代码将base64转换为blob

function base64tofile(base64){

    var mime = base64.split(';base64,')[0].split('data:')[1];
    var base64 = base64.split(';base64,')[1];

    mime = mime || '';
    var sliceSize = 1024;
    var byteChars = window.atob(base64);
    var byteArrays = [];

    for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
        var slice = byteChars.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    return new Blob(byteArrays, {type: mime});
}

基本上,我浏览到一个输入文件,然后转换为base64,然后执行一些图像处理(camanjs,crop等)过程,然后输出为base64,然后转换为blob并使用ajax上传到服务器

是否可以将Blob放回输入文件?因此,使用表单我可以将数据提交到服务器,而无需使用ajax或js,只需提交本机表单即可。

1 个答案:

答案 0 :(得分:1)

更新: 实际上,经过一些研究,事实证明可以做到!但是仅在现代浏览器中。您可以阅读有关here的信息。 SO here上已经有一个很好回答的问题。

基本上,您可以通过<input type=file>.files

设置输入

这是不可能的。输入的html文件只能指向计算机上实际存在的文件。

来自MDN

  

您无法通过脚本设置文件选择器的值-进行以下操作无效:

const input = document.querySelector("input[type=file]");
input.value = "foo";