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

How to replace contents of file in a zip using JSzip?

我一直在做一个项目,我通过 XMLHttpRequest(类型:blob)从互联网上下载了一个 zip 文件,然后我尝试使用 JSzip.So 读取它的内容,每个 zip 都有一个 json我感兴趣的是 manifest.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) 
 ?

抱歉,我是新手。

您似乎在尝试将对象写入不受支持的 zip。根据 JsZip 上的文档,要写入的值需要为以下类型:

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

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