2017-08-01 144 views
0

我有一個電子應用程序使用jszip創建一個zip文件,然後用戶可以保存。一切工作正常,但我的問題是我的應用程序使用用戶下載文件夾。我猜它正在製作一個臨時文件。我已經將我的應用程序提交給Mac商店,他們希望我使用其他位置而不是臨時文件的用戶下載文件夾。無論如何,我可以指定臨時位置,或者其他的東西,然後jszip會做到這一點?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但鍍鉻或使用下載FileSaver.js文件夾作爲一個臨時文件夾該文件在用戶選擇放置文件的位置之前。無論如何,我可以改變我的電子應用的臨時位置嗎?

+0

它是供用戶決定將文件下載到哪個文件夾。 – guest271314

+0

根據[jszip的文檔](https://stuk.github.io/jszip/),它不創建臨時文件。您在用戶的下載目錄中看到的臨時文件的內容是什麼?你能否展示一些能最小程度重現問題的代碼? – Anko

+0

這是用戶選擇保存文件的位置之前。我不知道JSZip製作了一個臨時文件,直到我在運行我的應用程序時使用了mac控制檯,並且它發現我的應用程序正在訪問用戶下載文件夾。 –

回答

0

如果有人遇到這種情況,我從來沒有想過在用戶選擇下載位置之前移動臨時文件的HTML5文件系統方式。相反,我使用帶有電子showSaveDialog的nodejs文件系統。我還必須更改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."); 
    }); 
    }); 
});