【问题标题】:jszip unzip flie sent from node.js Corrupted zip: missing 37 bytesjszip 解压缩从 node.js 发送的文件损坏的 zip:缺少 37 个字节
【发布时间】:2017-01-18 11:29:01
【问题描述】:

我通过 jszip 创建一个包含 json 字符串和一些 jpg 图像的 zip 文件并将其存储在 node.js 服务器上,这是 angularjs 代码:

    var blobToBase64 = function(blob, cb) {
    var reader = new FileReader();
    reader.onload = function() {
        var dataUrl = reader.result;
        var base64 = dataUrl.split(',')[1];
        cb(base64);
    };
    reader.readAsDataURL(blob);
    };
    if (element) {
    var promise;
    if (!promise) {
        $('#mydiv').show();
        var zip = new JSZip();
        zip.file("model.json", JSON.stringify(model.models), {
        type : "string",
        compression : "DEFLATE",
        compressionOptions : {
            level : 6
        }
        });
        for (var i = 0; i < model.maps.length; i++) {
        zip.file(i + ".png", model.maps[i], {
            base64 : true,
            compression : "DEFLATE",
            compressionOptions : {
            level : 6
            }
        });
        }
        zip.generateAsync({
        type : "blob"
        }).then(function(blob) {
        blobToBase64(blob, function(base64) {
            var update = {
            'blob' : base64
            };
            promise = $http.put('/api/admin/elements/model/' + element._id + "/level/" + element.level, update).success(function(d) {
            if (d === "Error") {
                alert("Error");
            }
            $('#mydiv').hide();
            });
            return promise;
        });
        });
    }
    }

node.js 的保存代码是:

var buf = new Buffer(req.body.blob, 'base64');
fs.writeFile(file, buf, function(err){
    if(err){
    console.log(err);
    }
    res.json("success");
});

存档创建成功,我可以用 WinRAR 打开它而没有问题,当我尝试加载文件并将其发送到浏览器时,我得到Corrupted zip: missing 37 bytes,这是代码 node.js 然后是 angularjs

fs.readFile(file, function(err, obj) {
    if (err) {
    res.json("Error");
    } else {
    res.set('Content-Type', 'application/zip');
    res.end(obj, 'binary');
    }
});

$http.get('/api/game/elements/model/' + el._id + "/level/" + el.level).success(function(d) {
    var new_zip = new JSZip();
    new_zip.loadAsync(d)
    .then(function(zip) {
        console.log(new_zip);
        new_zip.file("model.json").async("string"); // a promise of "Hello World\n"
    });
    //$location.path('/designer');
    });

【问题讨论】:

    标签: node.js base64 blob angular-promise jszip


    【解决方案1】:

    问题在于获取标头中的responseType:arraybuffer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多