代码之家  ›  专栏  ›  技术社区  ›  Doua Beri

Firefox Blob从文件中删除mime类型

  •  0
  • Doua Beri  · 技术社区  · 8 年前

    在Firefox Quantum(V57)之前,这在Firefox中是可用的。该代码在Chrome中仍然有效,但在Firefox中不再有效。

    用户从本地计算机选择图像,然后创建 Blob 包含一些JSON信息和文件,如下所示:

    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类型,使用以下扩展名之一将文件保存在服务器磁盘上 [".png", ".jpg", ".jpeg", ".gif"]

    由于Firefox quantum无法正常工作,收到的mime类型为 application/octet-stream

    这是一个Firefox bug还是api中发生了一些更改,我需要对代码进行一些更改?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Doua Beri    8 年前

    我设法做到了。我仍然认为这是一个bug,因为它曾经在Firefox的旧版本中工作。

    最后,我将所选文件转换为 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);
    
            }
    
        });
    
    推荐文章