Firefox Blob从文件

时间:2018-03-11 13:40:57

标签: javascript firefox

这曾经在Firefox Quantum之前在Firefox中运行(第57版)。该代码仍可在Chrome中使用,但不再适用于Firefox。

用户从他的本地计算机中选择一个图像,然后创建一个带有一些JSON信息的Blob和该文件,如下所示:

var fileElement = $("<input>").attr({
        "type": "file",
        "accept": "image/*"
    }).hide()
    .on("change", function () {
        var fileList = this.files;

        if (fileList.length > 0) {
            var file = fileList[0];
                    var str = JSON.stringify({
                        "uid": info.uid,
                        "utype": info.utype
                    });

                        var blob = new Blob([str.length, str, file]);
                        WebSocketConnection.sendMessage(blob);   

        }

    });

然后在服务器端,我提取JSON字符串并获取我想要的信息,然后从文件中提取mime类型,并根据该mime类型将文件保存在服务器磁盘上,并使用其中一个扩展{{1} }。

由于Firefox量程不起作用且接收的mime类型为[".png", ".jpg", ".jpeg", ".gif"]

这是一个Firefox错误还是在api中做了一些更改,我需要在代码中添加一些更改?

1 个答案:

答案 0 :(得分:0)

我设法让它发挥作用。我仍然认为这是一个错误,因为它曾经在Firefox旧版本中工作。

最后,我将所选文件转换为ArrayBuffer,然后使用ArrayBuffer创建了Blob文件。我还更新了主要问题代码,以便更好地了解正在发生的事情。

var fileElement = $("<input>").attr({
        "type": "file",
        "accept": "image/*"
    }).hide()
    .on("change", function () {
        var fileList = this.files;

        if (fileList.length > 0) {
            var file = fileList[0];
                    var str = JSON.stringify({
                        "uid": info.uid,
                        "utype": info.utype
                    });

                    var reader = new FileReader();
                    reader.onload = function () {
                        var arrayBuffer = this.result;
                        var blob = new Blob([str.length, str, arrayBuffer]);
                        WebSocketConnection.sendMessage(blob);                            
                    }
                    reader.readAsArrayBuffer(file);

        }

    });