我有一个使用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文件夹作为文件的临时文件夹,然后用户选择放置文件的位置。无论如何我可以改变我的电子应用程序的临时位置吗?
答案 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.");
});
});
});