从node.js发送的jszip unzip flie损坏的zip:缺少37个字节

问题描述 投票:0回答:1

我通过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个回答
0
投票

问题是get头中的responseType:arraybuffer

© www.soinside.com 2019 - 2024. All rights reserved.