Как заменить содержимое файла в zip-файле с помощью JSzip? - PullRequest
0 голосов
/ 19 мая 2018

Я работаю над проектом, я загружаю zip-файл из Интернета через XMLHttpRequest (тип: blob), а затем пытаюсь прочитать его содержимое с помощью JSzip. Поэтому каждый 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', теперь я хочу заменить существующий манифест этим измененным содержимым json 'obj' и сохранить его,Я пытался этот код

 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 голосов
/ 19 мая 2018

Похоже, вы пытаетесь записать объект в zip, который не поддерживается.Согласно документации на JsZip записываемое значение должно иметь тип:

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

См .: JSZip #файл (имя, данные [, параметры])

...