2012-07-05 4 views
33

Come posso fare in modo che un browser visualizzi un "Salva come finestra di dialogo" in modo che l'utente possa salvare il contenuto di una stringa in un file sul proprio sistema?Come far visualizzare a un browser un "Salva come finestra di dialogo" in modo che l'utente possa salvare il contenuto di una stringa in un file sul proprio sistema?

Ad esempio:

var myString = "my string with some stuff"; 
save_to_filesystem(myString,"myString.txt"); 

Con conseguente qualcosa di simile:

Example

+0

La risposta è la seguente: http://stackoverflow.com/questions/2897619/using-html5-javascript-to-generate-and-save-a-file – demux

+0

@ArnarYngvason è lo stesso processo che fare questo in angularjs? – bleykFaust

+1

@bleykFaust, la procedura è la stessa per tutte le applicazioni js di frontend. – demux

risposta

24

Nel caso qualcuno si chiede ancora ...

ho fatto in questo modo:

<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a>

non ricordo la mia fonte, ma utilizza le seguenti tecniche \ caratteristiche:

  1. attributo HTML5 scaricare
  2. di Uri dati

Trovato il riferimento:

http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/


EDIT: Come è possibile raccogliere dai commenti questo fa NON lavoro

  1. Internet Explorer (opere in V13 Bordo però)
  2. Safari
  3. iOS Safari
  4. Opera Mini
  5. Browser Android (4.3 e inferiore)

http://caniuse.com/#feat=download

-5

Utilizzando execComand:

<input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')"> 

Nel link seguente: execCommand

+1

Siamo spiacenti, "SaveAs" non è un comando definito. – Sablefoste

6

V'è una libreria javascript per questo, vedere

Tuttavia il saveAs() funzione non invierà stringa di puro al browser, è necessario convertirlo in blob:

function data2blob(data, isBase64) { 
    var chars = ""; 

    if (isBase64) 
    chars = atob(data); 
    else 
    chars = data; 

    var bytes = new Array(chars.length); 
    for (var i = 0; i < chars.length; i++) { 
    bytes[i] = chars.charCodeAt(i); 
    } 

    var blob = new Blob([new Uint8Array(bytes)]); 
    return blob; 
} 

e quindi chiamare saveAs sul blob, come come:

var myString = "my string with some stuff"; 
saveAs(data2blob(myString), "myString.txt"); 

Naturalmente ricordi comprendere la suddetta libreria javascript nella tua pagina web utilizzando <script src=FileSaver.js>

+4

Questo salva semplicemente "myString.txt" nella mia cartella Download, senza mostrare una finestra di dialogo. – meetar

+0

Ahh, no non lo faccio! Salvano tutti automaticamente. Quindi questa è sempre una funzione per browser, o c'è un modo per attivare il comportamento con uno script? – meetar

+4

Credo che sia una funzione per browser. In chrome, lo si imposta nelle impostazioni, nelle impostazioni avanzate, nella casella di controllo "Chiedi dove salvare ogni file prima di scaricare" –

9

questo è possibile utilizzare questo cross browser javascript implementazione della funzione HTML5 saveAs: https://github.com/koffsyrup/FileSaver.js

Se tutto ciò che si vuole fare è salvare il testo, lo script sopra funziona in tutti i browser (comprese tutte le versioni di IE), usando nient'altro che JS.

+3

forza il download sul browser, non apre la finestra di dialogo di salvataggio – user889030

Problemi correlati