Respuestas:
Aquí hay un ejemplo 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/
nullen cada onClickevento debería ser el truco, consulte: stackoverflow.com/a/12102992/63011
FileReader, pero un comentario sobre lo displayContentsanterior: tenga en cuenta que una configuración innerHTMLcomo esta con contenido no confiable puede ser una vulnerabilidad de seguridad. (Para verlo usted mismo, cree un elemento que bad.txtcontenga algo así <img src="/nonexistent" onerror="alert(1);">y vea que la alerta se ejecuta, podría ser un código más malicioso)
innerHTMLcon textContent. Gracias por tu comentario.
DOMContentLoadedevento para eso.
El recurso HTML5 fileReader le permite procesar archivos locales, pero estos DEBEN ser seleccionados por el usuario, no puede enraizar sobre el disco de los usuarios en busca de archivos.
Actualmente lo uso con versiones de desarrollo de Chrome (6.x). No sé qué otros navegadores lo admiten.
Debido a que no tengo vida y quiero esos 4 puntos de reputación para poder mostrar mi amor a las personas que realmente son buenas para codificar, he compartido mi adaptación del código de Paolo Moretti . Simplemente use la openFile(función para ejecutarse con el contenido del archivo como primer 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(), puede simplemente llamar fileInput.click(). (al menos en la última versión de Chrome)
Tratar
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
pero el usuario debe tomar medidas para elegir el archivo
El método de solicitud xmlhttp no es válido para los archivos en el disco local porque la seguridad del navegador no nos permite hacerlo. Pero podemos anular la seguridad del navegador creando un acceso directo-> clic derecho-> propiedades en destino "... navegador location path.exe "adjunte --allow-file-access-from-files. Esto se prueba en Chrome, sin embargo, se debe tener cuidado de que todas las ventanas del navegador se cierren y el código se ejecute desde el navegador abierto a través de este acceso directo.
Por lo general, Javascript no puede acceder a archivos locales en nuevos navegadores, pero el objeto XMLHttpRequest se puede usar para leer archivos. Entonces, en realidad, es Ajax (y no Javascript) el que está leyendo el archivo.
Si desea leer el archivo abc.txt, puede escribir el 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();
Ahora txtcontiene el contenido del archivo abc.txt.