Могу ли я скопировать из zip в другой zip архив с помощью jszip? Как эффективный способ сделать (частичный) клон zip usin jszip? - PullRequest
0 голосов
/ 31 января 2020

Моя функция принимает jszip в качестве ввода

var input = new JSZip();
zip.file("some.gif","R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs=",{base64: true}); 

, затем выводит другой zip

var output = new JSZip();
output.file("mimetype", "application/epub+zip",{compression:"STORE"});
source.folder("").forEach(function(relativePath,file)
{
 ...// copy all but some unecessary file from input to output
 output.file(file.name,file.content);
}

Вместо того, чтобы изменять ввод, я использую второй jszip, потому что:

  • для выходного zip-файла требуется, чтобы некоторые файлы находились в начале zip-файла (порядок файлов нельзя изменить с помощью jszip прямо сейчас AFAIK).
  • Я бы предпочел оставить ввод без изменений.

Сейчас это не работает, потому что input.file ("X"). Content не определен.
Почему я не могу прочитать содержимое?
Должен ли я go для чего-то вроде

Promise.all([
  input.file("Hello.txt").async("text"),
  input.file("images/smile.gif").async("uint8array")
  ...
]).then(function(result) {
  var hello = result[0]; // text
  var smile = result[1]; // uint8array
  ...
  output.file("Hello.txt",result[0]);
  ...
});

? Будут ли некоторые "штрафы" при вызове asyn c на входе? (Jszip просто передаст внутреннее представление контента или потребует некоторой обработки)

...