2013-07-09 11 views
6

Sto creando un'applicazione utilizzando node-webkit, quindi c'è molto javascript. Ho scritto una funzione node.js che prenderà una schermata e salvarla sul disco, tuttavia, la salva nella directory principale del progetto e vorrei chiedere all'utente di scegliere una posizione di salvataggio, ma non riesco a trovare una modo per creare una finestra di dialogo di salvataggio del file. Codice attuale:Chiedere all'utente dove salvare il file con Node.js

screen_shot.js:

var fs = require('fs'); 
exports.buildFile = function(name, value) { 
    var img = new Buffer(value, encoding='base64'); 
    fs.writeFile(name, img, function(err) { 
     if(err) { 
      console.log(err); 
     } else { 
      console.log("The file was saved!"); 
     } 
    }); 
}; 

index.html:

... 
    <script> 
     var sc= require('screen_shot'); 

     function wait() { 
      $('#close-popup').click(); 
      setTimeout(function() {screen_shot()}, 10); 
     } 

     function screen_shot() { 
      html2canvas($('body'), { 
       onrendered: function(canvas) { 
        var img = canvas.toDataURL("image/png").split(',')[1]; 
        var decodedImg = window.atob(img); 
        sc.buildFile("sc.png", img); 
       } 
      }); 
     } 
    </script> 
... 

<a href="#" onclick="wait();" data-role="button" data-theme="j">Screen shot</a> 

viene presa la funzione di attesa è solo per dare il popup che sto usando il momento di chiudere prima che lo screenshot .

Ho letto il node-webkit file dialog doc ma non è quello che sto cercando o non riesco a farlo funzionare correttamente.

+0

Questo potrebbe aiutare http://stackoverflow.com/questions/5612373/javascript-saveas-dialog – Seano666

+2

@ Seano666: No, l'OP funziona in un altro ambiente – Bergi

risposta

0

La pagina di dialogo file nel Wiki cita una save dialog file input

nwsaveas si aprirà una finestra di dialogo Salva che consentono all'utente di immettere il percorso di un file, ed è possibile selezionare un non esiste il file che è diverso con il tag di default del file di input:

Si potrebbe usare che in una finestra di dialogo personalizzato come un modale o in modo per interrogare l'utente per quell'ingresso.

esempio molto semplice, sulla base di codice fornito:

<script> 
    var fs = require('fs'); 

    var buildFile = function(name, value) { 
     var img = new Buffer(value, 'base64'); 
     fs.writeFile(name, img, function(err) { 
      if(err) { 
       console.log(err); 
      } else { 
       console.log("The file was saved!"); 
      } 
     }); 
    } 

    function wait() { 
     $('#close-popup').click(); 
     setTimeout(function() {screen_shot()}, 10); 
    } 

    function screen_shot() { 
     html2canvas($('body'), { 
      onrendered: function(canvas) { 
       var img = canvas.toDataURL("image/png").split(',')[1]; 
       var decodedImg = window.atob(img); 
       query_for_save_path(function (save_path) { 
       buildFile(save_path, img); 
       alert('Screenshot saved to: ' + save_path); 
       }); 
      } 
     }); 
    } 

    function query_for_save_path(cb) { 
     $('#dialog').show(); 
     $('#dialog input').one('change', function (event) { 
     cb($(this).val()); 
     }); 
    } 
</script> 

<a href="#" onclick="wait();" data-role="button" data-theme="j">Screen shot</a> 

<div id="dialog" style="display:none;"> 
    Choose a path to save your shot: 
    <input type="file" nwsaveas /> 
</div> 
Problemi correlati