javascript jquery html5

¿Cómo escribir en un archivo(directorio de usuarios) usando JavaScript?



jquery html5 (1)

Quiero escribir en txt de cualquier archivo desde Chrome (Todas las versiones) usando html5 y javascript o jquery.

Probé la API de FileSystem y el código que probé es:

function onFs(fs) { console.log(''test''); fs.root.getFile(''log.txt'', {create: true, exclusive: true}, function(fileEntry) { // fileEntry.isFile === true // fileEntry.name == ''log.txt'' // fileEntry.fullPath == ''/log.txt'' fileEntry.getMetaData(function(md) { console.log(md.modificationTime.toDateString()); }, onError); }, onError ); } window.webkitRequestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, onFs);

Pero no funciona.

¿Hay alguna forma de escribir en el archivo?


Quiero escribir el archivo en el directorio de usuarios

No puede escribir directamente el archivo en el sistema de archivos del usuario.

Después de buscar SO para preguntas similares para resolver con precisión la pregunta, ¿pude $ cat contenido del archivo creado en plnkr después de esta answer publicada por @Iain en ¿Dónde se almacena el almacenamiento del sistema de archivos PERSISTENT con Chrome? . El archivo se escribió en el sistema de archivos del usuario en el ~/.config/[chrome, chromium] .

Administrador de archivos usado para navegar

~/.config/[chrome, chromium]/Default/File System

para revisar el directorio; el archivo que contiene el texto escrito a continuación se encontró en una carpeta que tiene dos dígitos como nombre de carpeta, luego dentro de dos subdirectorios adicionales; un subdirectorio que tiene una letra minúscula como nombre de carpeta; dentro de este subdirectorio había otro subdirectorio que tenía dos dígitos como nombre de carpeta; el archivo escrito por window.webkitRequestFileSystem tenía ocho dígitos como nombre de archivo, sin extensión, aunque tenía el tipo MIME "text/plain" correcto; establecido en la propiedad de type Blob .

Luego en la terminal

$ cd ~/.config/[chrome, chromium]/Default/File/ System/[three digits]/[lowercase letter]/[two digits] $ cat [eight digits] Lorem Ipsum

No he intentado crear un archivo .sh y ejecutarlo. Probablemente requeriría colocar el directorio en la path o mover el archivo a una carpeta en la path existente; establecer los permissions apropiados para el archivo. Posiblemente podría ajustar esto en la configuración del navegador Chrome / Chrome, aunque tampoco lo he intentado.

Probablemente podría escribir un comando para copiar o mover el archivo en /path/to/file a una carpeta en path , y ejecutar el archivo; u otro enfoque.

Puede usar el atributo de download de a elemento para permitir la descarga del archivo creado por createWriter al sistema de archivos del usuario.

El sistema de archivos está protegido.

Debido a que el sistema de archivos está protegido, una aplicación web no puede acceder a los archivos de otra aplicación. Tampoco puede leer o escribir archivos en una carpeta arbitraria (por ejemplo, Mis imágenes y Mis documentos) en el disco duro del usuario.

ver también en Definititons

almacenamiento persistente El almacenamiento persistente es el almacenamiento que permanece en el navegador a menos que el usuario lo elimine o la aplicación lo elimine.
almacenamiento temporal El almacenamiento transitorio está disponible para cualquier aplicación web. Es automático y no es necesario solicitarlo, pero el navegador puede eliminar el almacenamiento sin previo aviso.

Quiero escribir el archivo en el directorio de usuarios porque tiene que ser entendible por el usuario.

Editar, actualizado

Puede usar el método descrito anteriormente. Es decir, use un administrador de archivos en para revisar cómo aparecen las carpetas y los archivos en

~/.config/[chrome, chromium]/Default/File System ## do stuff with contents of file written by `window.requestFilesystem`

Para ver el archivo en Chrome / DevTools FileSystem , puede navegar a DevTools -> Experiments -> verificar la FileSystem inspection , log.txt debe aparecer en la pestaña Resources en FileSystem .

También puede navegar al archivo en la barra de direcciones usando URL

filesystem:http://run.plnkr.co/temporary/log.txt

que debe tener contenido

Lorem Ipsum

o

filesystem:http://run.plnkr.co/temporary/

para ver todos los archivos y directorios en la raíz del sistema de archivos temporal

Consulte Explorar la API de FileSystem

Primero inicie Chrome / Chrome con el --allow-file-access-from-files , consulte ¿Cómo hago que el indicador Google Chrome "--allow-file-access-from-files" sea permanente? .

próximo

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;

agregar manejo de errores

function errorHandler(e) { var msg = ''''; switch (e.message) { case FileError.QUOTA_EXCEEDED_ERR: msg = ''QUOTA_EXCEEDED_ERR''; break; case FileError.NOT_FOUND_ERR: msg = ''NOT_FOUND_ERR''; break; case FileError.SECURITY_ERR: msg = ''SECURITY_ERR''; break; case FileError.INVALID_MODIFICATION_ERR: msg = ''INVALID_MODIFICATION_ERR''; break; case FileError.INVALID_STATE_ERR: msg = ''INVALID_STATE_ERR''; break; default: msg = ''Unknown Error''; break; }; console.log(''Error: '' + msg); }

Entonces deberías poder

function writeFile(fs) { fs.root.getFile(''log.txt'', {create: true}, function(fileEntry) { // Create a FileWriter object for our FileEntry (log.txt). fileEntry.createWriter(function(fileWriter) { fileWriter.onwriteend = function(e) { console.log(''Write completed.''); // call `readFile` here window.requestFileSystem(window.TEMPORARY, 1024*1024, readFile, errorHandler); }; fileWriter.onerror = function(e) { console.log(''Write failed: '' + e.toString()); }; // Create a new Blob and write it to log.txt. var blob = new Blob([''Lorem Ipsum''], {type: ''text/plain''}); fileWriter.write(blob); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.TEMPORARY, 1024*1024, writeFile, errorHandler); function readFile(fs) { fs.root.getFile(''log.txt'', {}, function(fileEntry) { // Get a File object representing the file, // then use FileReader to read its contents. fileEntry.file(function(file) { var reader = new FileReader(); reader.onloadend = function(e) { console.log(e.target.result) }; reader.readAsText(file); }, errorHandler); }, errorHandler); }

plnkr http://plnkr.co/edit/EVVNYYUvHiM545T06kMC?p=preview

Tenga en cuenta que en Chrome 38+ también es posible crear un objeto File usando el new File() constructor new File() ; ver Chrome: ¿Crear entrada de archivo desde blob con Javascript? .

No, es un proceso en segundo plano, guardar los datos en el archivo existe en la carpeta.

Este enfoque tampoco escribirá automáticamente el archivo creado en una carpeta existente en el sistema de archivos del usuario.

Con cualquiera de los dos enfoques, la acción del usuario debería ser necesaria para guardar el archivo en el sistema de archivos del usuario. Esto se puede lograr usando el atributo de download en a elemento, data URI ¿Cómo exportar información de matriz de JavaScript a csv (en el lado del cliente)? , o un elemento iframe Descargar archivo usando Javascript / jQuery ; que debería solicitar al usuario que seleccione guardar el archivo o no guardar el archivo.

Consulte también La interfaz de FileSaver.js , FileSaver.js