JSZip临时文件位置

时间:2017-08-01 22:40:13

标签: javascript electron jszip filesaver.js

我有一个使用jszip的电子应用程序来创建一个用户可以保存的zip文件。一切正常但我的问题是我的应用程序使用用户下载文件夹。我猜它正在制作一个临时文件。我已将我的应用程序提交到mac商店,他们希望我使用其他位置而不是临时文件的用户下载文件夹。无论如何我可以指定临时位置或者除了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使用downloads文件夹作为文件的临时文件夹,然后用户选择放置文件的位置。无论如何我可以改变我的电子应用程序的临时位置吗?

1 个答案:

答案 0 :(得分:0)

如果有人遇到这种情况,我从未想过在用户选择下载位置之前移动临时文件的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.");
    });
    });
});