Расположение временного файла JSZip

У меня есть электронное приложение, использующее jszip для создания zip-файла, который затем пользователь может сохранить. Все работает нормально, но моя проблема в том, что мое приложение использует папку загрузки пользователей. Я предполагаю, что это делает временный файл. Я отправил свое приложение в Mac Store, и они хотят, чтобы я использовал другое местоположение вместо папки пользовательских загрузок для временного файла. В любом случае я могу указать временное местоположение или что-то еще, кроме jszip, который будет делать это?

Вот код, который я использую

savePNGButton.addEventListener('click', function(e) {
  var zip = new JSZip();
  if (WatermarkText == ""){
    var img = zip.folder("images");
  } else {
    var img = zip.folder(WatermarkText);
  }
  $(".WatermarkPhoto").each(function(index) {
   imgsrc = this.src;
   var DataURL = imgsrc.replace('data:image/png;base64,','');
   img.file(WatermarkText+index+".png", DataURL, {base64: true});
  });
  zip.generateAsync({type:"blob"})
  .then(function(content) {
      saveAs(content, WatermarkText+".zip");
  });
});

[править] Если взглянуть больше на это, похоже, моя проблема не в JSZip, а в chrome или FileSaver.js, использующих папку загрузок в качестве временной папки для файла, прежде чем пользователи решат, где разместить файл. Могу ли я изменить временное местоположение своего электронного приложения?

1 ответ

Решение

Если кто-то сталкивался с этим, я так и не нашел способ обойти временную файловую систему HTML5 до того, как пользователи выберут место загрузки. Вместо этого я использую файловую систему nodejs с электронами showSaveDialog. Мне также пришлось изменить JSZip, чтобы использовать.generateNodeStream вместо.generateAsync. Ниже моя функция, которую я получил для меня.

savePNGButton.addEventListener('click', function(e) {
  var zip = new JSZip();
  if (WatermarkText == ""){
    var img = zip.folder("images");
  } else {
    var img = zip.folder(WatermarkText);
  }
  $(".WatermarkPhoto").each(function(index) {
   imgsrc = this.src;
   var DataURL = imgsrc.replace('data:image/png;base64,','');
   img.file(WatermarkText+index+".png", DataURL, {base64: true});
  });
  // zip.file("file", content);
  // ... and other manipulations
    dialog.showSaveDialog({title: 'Test',defaultPath: '~/'+WatermarkText+'.zip',extensions: ['zip']},(fileName) => {
      if (fileName === undefined){
          console.log("You didn't save the file");
          return;
      }
    zip
    .generateNodeStream({type:'nodebuffer',streamFiles:true})
    .pipe(fs.createWriteStream(fileName))
    .on('finish', function () {
        // JSZip generates a readable stream with a "end" event,
        // but is piped here in a writable stream which emits a "finish" event.
        console.log("zip written.");
    });
    });
});
Другие вопросы по тегам