我通过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');
});
问题是get头中的responseType:arraybuffer