Risposte:
Ecco un esempio usando FileReader:
function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
displayContents(contents);
};
reader.readAsText(file);
}
function displayContents(contents) {
var element = document.getElementById('file-content');
element.textContent = contents;
}
document.getElementById('file-input')
.addEventListener('change', readSingleFile, false);
<input type="file" id="file-input" />
<h3>Contents of the file:</h3>
<pre id="file-content"></pre>
http://dev.w3.org/2006/webapi/FileAPI/
nullsu ogni onClickevento dovrebbe fare il trucco, vedi: stackoverflow.com/a/12102992/63011
FileReader, ma un commento displayContentssopra: nota che l'impostazione innerHTMLcome questa con contenuto non attendibile può essere una vulnerabilità di sicurezza. (Per vederlo da solo, crea un bad.txtcontenitore contenente qualcosa di simile <img src="/nonexistent" onerror="alert(1);">e osserva che l'avviso viene eseguito: potrebbe trattarsi di un codice più dannoso.)
innerHTMLcon textContent. Grazie per il tuo commento.
DOMContentLoadedevento per questo.
La funzione fileReader HTML5 consente di elaborare file locali, ma DEVONO essere selezionati dall'utente, non è possibile eseguire il rooting sul disco degli utenti alla ricerca di file.
Attualmente lo uso con le versioni di sviluppo di Chrome (6.x). Non so quali altri browser lo supportano.
Perché non ho una vita e voglio quei 4 punti reputazione in modo da poter mostrare il mio amore a (vota le risposte di) persone che sono effettivamente brave a scrivere codice e ho condiviso il mio adattamento del codice di Paolo Moretti . Basta usare la openFile(funzione da eseguire con il contenuto del file come primo parametro) .
function dispFile(contents) {
document.getElementById('contents').innerHTML=contents
}
function clickElem(elem) {
// Thx user1601638 on Stack Overflow (6/6/2018 - /programming/13405129/javascript-create-and-save-file )
var eventMouse = document.createEvent("MouseEvents")
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
elem.dispatchEvent(eventMouse)
}
function openFile(func) {
readFile = function(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
fileInput.func(contents)
document.body.removeChild(fileInput)
}
reader.readAsText(file)
}
fileInput = document.createElement("input")
fileInput.type='file'
fileInput.style.display='none'
fileInput.onchange=readFile
fileInput.func=func
document.body.appendChild(fileInput)
clickElem(fileInput)
}
Click the button then choose a file to see its contents displayed below.
<button onclick="openFile(dispFile)">Open a file</button>
<pre id="contents"></pre>
clickElem(), puoi invece semplicemente chiamare fileInput.click(). (almeno nell'ultima versione di Chrome)
Provare
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
ma l'utente deve agire per scegliere il file
Il metodo di richiesta xmlhttp non è valido per i file sul disco locale perché la sicurezza del browser non ci consente di farlo. Ma possiamo sovrascrivere la sicurezza del browser creando un collegamento-> tasto destro-> proprietà Nel target "... browser location path.exe "append --allow-file-access-from-files.Questo è testato su Chrome, tuttavia è necessario prestare attenzione a chiudere tutte le finestre del browser e eseguire il codice dal browser aperto tramite questo collegamento.
In genere Javascript non può accedere ai file locali nei nuovi browser, ma l'oggetto XMLHttpRequest può essere utilizzato per leggere i file. Quindi in realtà è Ajax (e non Javascript) a leggere il file.
Se vuoi leggere il file abc.txt, puoi scrivere il codice come:
var txt = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
txt = xmlhttp.responseText;
}
};
xmlhttp.open("GET","abc.txt",true);
xmlhttp.send();
Ora txtcontiene il contenuto del file abc.txt.