Estoy intentando proporcionar una solución de solo script para leer el contenido de un archivo en una máquina cliente a través de un navegador.
Tengo una solución que funciona con Firefox e Internet Explorer. No es bonito, pero solo estoy probando cosas en este momento:
function getFileContents() {
var fileForUpload = document.forms[0].fileForUpload;
var fileName = fileForUpload.value;
if (fileForUpload.files) {
var fileContents = fileForUpload.files.item(0).getAsBinary();
document.forms[0].fileContents.innerHTML = fileContents;
} else {
// try the IE method
var fileContents = ieReadFile(fileName);
document.forms[0].fileContents.innerHTML = fileContents;
}
}
function ieReadFile(filename)
{
try
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(filename, 1);
var contents = fh.ReadAll();
fh.Close();
return contents;
}
catch (Exception)
{
return "Cannot open file :(";
}
}
Puedo llamar getFileContents()
y escribirá el contenido en el fileContents
área de texto.
¿Hay alguna forma de hacer esto en otros navegadores?
Estoy más preocupado por Safari y Chrome en este momento, pero estoy abierto a sugerencias para cualquier otro navegador.
Editar: En respuesta a la pregunta, "¿Por qué quieres hacer esto?":
Básicamente, quiero codificar el contenido del archivo junto con una contraseña de un solo uso en el lado del cliente para poder enviar esta información como verificación.
fuente
Respuestas:
Editado para agregar información sobre la API de archivos
Desde que escribí originalmente esta respuesta, la API de archivo se propuso como estándar y se implementó en la mayoría de los navegadores (a partir de IE 10, que agregó soporte para la
FileReader
API descrita aquí, aunque aún no laFile
API). La API es un poco más complicada que la API de Mozilla anterior, ya que está diseñada para admitir la lectura asincrónica de archivos, mejor soporte para archivos binarios y decodificación de diferentes codificaciones de texto. Existe cierta documentación disponible en Mozilla Developer Network , así como varios ejemplos en línea. Lo usaría de la siguiente manera:Respuesta original
No parece haber una forma de hacer esto en WebKit (por lo tanto, Safari y Chrome). Las únicas claves que tiene un objeto File son
fileName
yfileSize
. Según el mensaje de confirmación para el soporte de File y FileList, estos están inspirados en el objeto File de Mozilla , pero parecen admitir solo un subconjunto de las características.Si desea cambiar esto, siempre puede enviar un parche al proyecto WebKit. Otra posibilidad sería proponer la API de Mozilla para su inclusión en HTML 5 ; la lista de correo WHATWG es probablemente el mejor lugar para hacerlo. Si lo hace, es mucho más probable que haya una forma de hacerlo en varios navegadores, al menos en un par de años. Por supuesto, enviar un parche o una propuesta para su inclusión en HTML 5 significa algo de trabajo para defender la idea, pero el hecho de que Firefox ya lo implemente te da algo para empezar.
fuente
Para poder leer un archivo seleccionado por el usuario, utilizando un cuadro de diálogo de apertura de archivo, puede utilizar la
<input type="file">
etiqueta. Puede encontrar información al respecto en MSDN . Cuando se elige el archivo, puede usar la API FileReader para leer el contenido.fuente
¡Feliz codificación!
Si obtiene un error en Internet Explorer, cambie la configuración de seguridad para permitir ActiveX
fuente