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');
    });
4

1 回答 1

0

问题出responseType:arraybuffer在获取标头中

于 2016-09-10T14:25:38.930 回答