JSZip 临时文件位置
JSZip temporary file location
我有一个电子应用程序使用 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 在用户选择文件放置位置之前使用下载文件夹作为文件的临时文件夹。无论如何,我可以更改我的电子应用程序的临时位置吗?
如果有人遇到这个问题,我从来没有想过在用户选择下载位置之前绕过 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.");
});
});
});
我有一个电子应用程序使用 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 在用户选择文件放置位置之前使用下载文件夹作为文件的临时文件夹。无论如何,我可以更改我的电子应用程序的临时位置吗?
如果有人遇到这个问题,我从来没有想过在用户选择下载位置之前绕过 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.");
});
});
});