2017-08-01 3 views
0

J'ai une application électronique en utilisant jszip pour créer un fichier zip que l'utilisateur est alors en mesure d'enregistrer. Tout fonctionne bien mais mon problème est que mon application utilise le dossier de téléchargement des utilisateurs. Je suppose que c'est un fichier temporaire. J'ai soumis mon application au magasin mac et ils veulent que j'utilise un autre emplacement au lieu du dossier de téléchargement des utilisateurs pour le fichier temporaire. Y at-il de toute façon je peux spécifier l'emplacement temporaire ou peut-être quelque chose d'autre que jszip qui fera cela?JSZip emplacement de fichier temporaire

Voici le code que j'utilise

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"); 
    }); 
}); 

[modifier] En regardant de plus en cela, il semble que mon problème est pas avec JSZip mais avec du chrome ou FileSaver.js en utilisant les téléchargements dossier comme un dossier temporaire pour le fichier avant que les utilisateurs choisissent où placer le fichier. Y at-il de toute façon je peux changer l'emplacement de temp pour mon application électronique?

+0

Il appartient à l'utilisateur de décider du dossier dans lequel télécharger les fichiers. – guest271314

+0

Basé sur les [docs de jszip] (https://stuk.github.io/jszip/), il ne crée pas de fichiers temporaires. Quel est le contenu du fichier temporaire que vous voyez dans le répertoire de téléchargement de l'utilisateur? Pourriez-vous montrer un code qui reproduit le problème au minimum? – Anko

+0

Ceci est avant que l'utilisateur ne choisisse où enregistrer le fichier. Je n'étais pas au courant que JSZip a fait un fichier temporaire jusqu'à ce que j'utilise la console mac lors de l'exécution de mon application et il est apparu que mon application accédait au dossier de téléchargement des utilisateurs. –

Répondre

0

Si quelqu'un trouve cela, je n'ai jamais trouvé un moyen de contourner le système de fichiers HTML5 pour déplacer le fichier temporaire avant que les utilisateurs ne choisissent l'emplacement de téléchargement. Au lieu de cela, j'utilise le système de fichiers nodejs avec les électrons showSaveDialog. J'ai également dû changer JSZip pour utiliser .generateNodeStream au lieu de .generateAsync. Voici ma fonction que j'ai travaillé pour moi.

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."); 
    }); 
    }); 
});