Расположение временного файла 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.");
});
});
});