Forza download per blob creato con FileWriter in JavaScript [duplicato]
-
11-10-2019 - |
Domanda
Questa domanda ha già una risposta qui:
HTML5 introduce la classe FileWriter. Con questa classe è possibile effettuare Blobs. (Un file è un'estensione di un Blob.) Con JavaScript si può fare un Blob e, per esempio spettacolo utilizzando la DataURL.
Esempio:
var bb = new BlobBuilder();
bb.append('some text')
var blob = bb.getBlob('text/plain');
var fr = new FileReader();
fr.onload = function(e) {
document.location = this.result; // voila the dataURL
}
fr.readAsDataURL(blob);
Ma non è abbastanza buono :) Voglio che il file appena creato (testo) da scaricare. Non ha aperto nello stesso o in una finestra separata.
C'è un modo? Ci deve essere. Come?
(La discussione è già presente nel Google Chrome gruppo )
Aggiorna
L'API file è stato modificato, in quanto le specifiche sono cambiate (o qualcosa del genere !?). Webkit rotto compatibilità con BlobBuilder
, ora chiamato WebKitBlobBuilder
. Stesso esempio in modo diverso su jsFiddle
Aggiorna
Creazione di Blobs ora funziona in modo diverso di nuovo (non più append()
):
blob = new Blob(['some text'], {type: 'text/plain'});
Soluzione
Il tag scaricare in combinazione con l'oggetto Blob fa il trucco (almeno nelle ultime versioni Chrome). Vedere questo violino :
var blob = new Blob(['blaaaaat'], {type: 'text/plain'});
$('a').attr("href", window.URL.createObjectURL(blob));
$('a').attr("download", "woeii.txt");
Firefox Indifferente supportare il download attributo però (che supporta l'oggetto Blob). Le discussioni sul implementazione dell'attributo di download in Firefox sono disponibili qui :
Modifica L'attributo download è ora supportato dalle ultime versioni di Firefox a partire dal 2013/10/03
Altri suggerimenti
Ecco un soluzione pura JavaScript per la creazione di un blob di testo e il download come file di testo
var fileContent = 'This is sample text file';
var fileName = 'sampleFile.txt';
const blob = new Blob([fileContent], { type: 'text/plain' });
const a = document.createElement('a');
a.setAttribute('download', fileName);
a.setAttribute('href', window.URL.createObjectURL(blob));
a.click(); // EXECUTING CLICK EVENT WILL AUTO-DOWNLOAD THE FILE