如何使用JSzip替换zip中的文件内容?

时间:2018-05-19 17:32:15

标签: javascript jszip

我一直在研究一个项目,我通过XMLHttpRequest(类型:blob)从互联网上下载一个zip文件,然后我尝试使用JSzip来阅读它的内容。每个zip都有一个json,我感兴趣的是说清单。 JSON。所以我成功地用这段代码阅读了它。

var read_zip = new JSZip();
res=xhr.response;
read_zip.loadAsync(xhr.response).then(function (zip) {
return zip.file("manifest.json").async("string");
}).then(function (text) {
obj = JSON.parse(text);
console.log(text);});

在此之后我对“obj”进行了一些更改,现在我想用这个修改过的“obj”替换现有的清单。 json内容并保存。 我正在尝试这段代码

 var write_zip = new JSZip();
 write_zip.loadAsync(xhr.response).then(function (zip) {
 zip.file("manifest.json" , obj) ;
 zip.generateAsync({type:"blob"})
 .then(function (blob) {
 saveAs(blob, "hello.zip");
 });});

但我收到此错误

 Uncaught (in promise) Error: Can't read the data of 'manifest.json'. 
 Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) 
 ?
抱歉,我是新手。

1 个答案:

答案 0 :(得分:0)

看起来您正试图将对象写入zip,但不支持。根据JsZip上的文档,要写入的值必须是类型:

String / ArrayBuffer / Uint8Array / Buffer / Blob / Promise / Nodejs stream

请参阅:JSZip#file(name, data [,options])