2015-05-11 15 views
11

Ho un grande dato in forma di oggetto JSON nel javascript. L'ho convertito nella stringa usando JSON.stringify(). Ora il mio caso d'uso è di fornire questa grande stringa in un file di testo all'utente. Quindi per questo ho scritto sotto il codice.Impossibile scaricare i dati di grandi dimensioni utilizzando javascript

codice HTML codice

<button id='text_feed' type="submit">Generate ION Feed</button> 

    <a href="data:attachment/txt" id="textLink" download="feed.txt"></a> 

Javascript

var text = //huge string 

$("#text_feed").click(function() { 
     _generateFeed(text); 
}); 

var _generateFeed = function(text) { 
    //some code here 
    $("#textLink").attr("href", 
          "data:attachment/txt," + encodeURIComponent(text)) [0].click(); 
    }); 
}; 

Problema: Quando la lunghezza della stringa è di piccole dimensioni, sono in grado di scaricare i dati. Ma quando la lunghezza della stringa aumenta (> 10^5), la mia pagina si arresta in modo anomalo. Ciò si è verificato perché "encodeUriComponet (text)" non è in grado di codificare i dati grandi .

Ho anche provato window.open("data:attachment/txt," + encodeURIComponent(text)); Ma ancora una volta la mia pagina ha fatto si è schiantato a causa della stessa ragione per cui encodeURIComponet era in grado di codificare uno stringa di grandi dimensioni come ad.

Un altro approccio: Pensavo anche di scrivere i dati in un file utilizzando HTML5 API di scrittura di file, ma ha il supporto solo in Chrome browser web, ma ho bisogno di fare questo lavoro per atleast Firefox e Chrome sia.

Use Case Io non voglio fare più download rompendo i dati, come ho bisogno di avere i dati in un unico file, alla fine.

E il mio obiettivo è quello di supportare una stringa di circa 10^6 di lunghezza. Qualcuno può aiutarmi a scaricare/scrivere questa quantità di dati in un singolo file.

+6

ne dite 'URL.createObjectURL (nuovo Blob (testo, {type: 'text/plain'})); '- funziona? – CodingIntrigue

+0

@RGraham D'accordo, prova la [Blob API] (https://developer.mozilla.org/en/docs/Web/API/Blob)! – Xufox

+2

[Ecco una demo di questo] (http://jsfiddle.net/efLfqp3f/). Blob compila un megabyte di testo come se fosse niente. – Xufox

risposta

1

From the OP:

ho risolto come qui sotto.

var _generateFeed = function(text) { 
    /*some code here*/ 
    var url = URL.createObjectURL(new Blob([text], {type:'text/plain'})); 
    $("#textLink").attr("href",url)[0].click(); 
}; 

Note:

  • URL.createObjectURL() è compatibile con i browser moderni e IE10 +, ma si tratta di una tecnologia sperimentale instabile.
  • oggetti creati con URL.createObjectURL() "devono essere rilasciate chiamando URL.revokeObjectURL() quando non sono più necessari." - MDN
Problemi correlati