Respostas:
Aqui está um exemplo 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/
nullem cada onClickcaso deve fazer o truque, consulte: stackoverflow.com/a/12102992/63011
FileReader, mas um comentário ao displayContentsexposto acima: observe que configurações innerHTMLcomo essa com conteúdo não confiável podem ser uma vulnerabilidade de segurança. (Para ver isso por si mesmo, criar uma bad.txtcontendo algo como <img src="/nonexistent" onerror="alert(1);">e ver que o alerta é executado-lo poderia ser mais códigos maliciosos.)
innerHTMLpor textContent. Obrigado por seu comentário.
DOMContentLoadedevento para isso.
O recurso fileReader HTML5 permite que você processe arquivos locais, mas estes DEVEM ser selecionados pelo usuário, você não pode fazer root no disco do usuário procurando arquivos.
Atualmente, eu uso isso com versões de desenvolvimento do Chrome (6.x). Não sei o que outros navegadores suportam.
Como não tenho vida e quero esses quatro pontos de reputação, para mostrar meu amor (respostas positivas) por pessoas que são realmente boas em codificação, compartilhei minha adaptação do código de Paolo Moretti . Basta usar a openFile(função para ser executada com o conteúdo do arquivo como primeiro parâmetro) .
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(), basta ligar fileInput.click(). (pelo menos na versão mais recente do Chrome)
Experimentar
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
mas o usuário precisa executar uma ação para escolher o arquivo
O método de solicitação xmlhttp não é válido para os arquivos no disco local porque a segurança do navegador não nos permite fazê-lo. Mas podemos substituir a segurança do navegador criando um atalho-> clique com o botão direito do mouse-> propriedades no destino "... browser location path.exe "anexar - Permitir acesso ao arquivo a partir de arquivos.Este é testado no chrome, no entanto, deve-se tomar cuidado para que todas as janelas do navegador sejam fechadas e o código seja executado no navegador aberto por esse atalho.
O Javascript normalmente não pode acessar arquivos locais em novos navegadores, mas o objeto XMLHttpRequest pode ser usado para ler arquivos. Portanto, na verdade, é o Ajax (e não o Javascript) que está lendo o arquivo.
Se você deseja ler o arquivo abc.txt, pode escrever o código como:
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();
Agora txtcontém o conteúdo do arquivo abc.txt.