HTML5 almacenamiento fuera de línea. ¿Almacenamiento de archivos? API del sistema de archivos y directorios

StackOverflow https://stackoverflow.com/questions/3936736

Pregunta

Para el almacenamiento de datos en línea de aplicación web puede utilizar:

Pero al parecer no hay almacenamiento de archivos. Por supuesto, hay un basada en el almacenamiento en caché de manifiesto , pero es sólo una memoria caché y no se supone que se utiliza como un almacenamiento de datos de usuario.

¿Quiere decir que el usuario de la aplicación web se ve obligado a utilizar algún tipo de almacenamiento de archivos en la nube?

¿Hay alguna manera de guardar archivos de gran tamaño en la máquina local del usuario? O tal vez de alguna manera para seleccionar una aplicación web carpeta local se puede utilizar para almacenar datos de usuario?

Editar . Seguridad. HTML5 ya tiene la capacidad de escribir grandes porciones de datos a la máquina local del usuario. No veo ningún problema de seguridad si un navegador proporcionará otra, abstracción basada en archivos para almacenar datos. Puede ser un poco de máquina virtual, sistema de ficheros virtual, lo que sea.

Hm, creo, es posible escribir JS sistema de archivos y almacenarlo como una mancha en SQL ...

similares preguntas .

Actualizar : Hm ... recientemente he encontrado este y esta . Tal vez es lo que estoy buscando ... Sí, lo es! Vea la respuesta a continuación.

¿Fue útil?

Solución

Por fin, lo he encontrado! Aquí está la respuesta:

voy a tener la DOMFileSystem con un lado de acceso de lectura / escritura por favor escribió:

  

Eric Uhrhane de Google ha sido   trabajando en el borrador de trabajo de la    API del archivo: directorios y Sistema especificación que define un conjunto de   APIs para crear un sistema de archivos de espacio aislado   donde una aplicación web puede leer y escribir   datos a.

Wow! Estoy tan emocionada!

Otros consejos

¿Por qué no usar localStorage mientras el usuario está editando un documento y la API FileWriter cuando quieren guardarlo en el disco? La mayoría de la gente está acostumbrada a ver un ahorro de diálogo pop-up al guardar un documento.

El único escenario que puedo pensar que las órdenes de acceso a la API userless FileWriter es una función de guardado automático, pero el autoguardado a localStorage puede ser igual de bueno.

Hay una manera de guardar archivos relativamente grandes a un disco duro de los usuarios si están dispuestos a utilizar Flash. Mira en Downloadify:

http://www.bitrepository.com/downloadify-client- side-archivo-generation.html

Downloadify le permite enviar datos a un archivo SWF y tienen que SWF crear un archivo en la máquina de los usuarios. Mi recomendación sería la de almacenar los datos a través de uno de los métodos que enumeró, Webstorage, base de datos SQLite, etc. Ponga todos sus activos, incluyendo el SWF en el archivo de manifiesto así que todo se almacena en caché localmente en el navegador. A continuación, puede obtener información de su base de datos o WebStorage y utilizar el SWF para crear los archivos que necesita.

No estoy seguro de si va a ser capaz de leer estos archivos de nuevo en su aplicación web.

Otra opción para guardar los datos es mediante el uso de etiquetas de enlace con el datos URI esquema . Sin embargo, no estoy seguro de si es compatible con todos los navegadores más importantes en la actualidad.

Por razones de seguridad no se puede archivos de escritura en el sistema de archivos local del usuario en caso de que se utilizan para propósitos nefastos por malas personas.

Eso no es probable que cambie, y eso es una cosa buena.

El aterrizaje de sistema de archivos HTML5 API comenzado en Chrome 8 y es bastante completo a partir de ahora (Chrome 11).

Hay un buen tutorial sobre ella aquí: http://www.html5rocks.com/tutorials / archivo / disco /

http://fsojs.com envuelve la API de sistema de archivos de manera efectiva, si desea una solución fácil

Como se ha mencionado por otros aquí, el FileWriter y sistema de archivos API se puede utilizar para almacenar archivos en la máquina de un cliente desde el contexto de una pestaña del navegador / ventana.

Sin embargo, hay varias cosas que pertenecen a estas API que se debe tener en cuenta:

  • Las implementaciones de las API actualmente existe sólo en base de cromo navegadores (Chrome y Opera)
  • Tanto de las API fueron sacados de la pista de las normas W3C el 24 de abril de 2014, ya partir de ahora son propiedad
  • La eliminación de las APIs (ahora propiedad) a partir de la implementación de los navegadores en el futuro es una posibilidad
  • caja de arena (una ubicación en la parte exterior del disco de los archivos que pueden producir ningún efecto) se utiliza para almacenar los archivos creados con la API
  • sistema de archivos virtual (una estructura de directorios que no necesariamente existe en el disco de la misma forma que lo hace cuando se accede desde el navegador) se utiliza representar los archivos creados con la API

IsolatedStorage , que hasn' T ha mencionado hasta el momento, también permite el archivo de e / S de un contexto pestaña / ventana, pero está disponible a través únicamente a través de Silverlight y requiere el uso de código administrado acceso. Es, como sistema de archivos, también existe en una caja de arena y hace uso de un sistema de archivos virtual.

Dada la alta penetración de mercado de ambos navegadores basados ??en cromo y Silverlight (apoyo para los que, curiosamente se ha dejado caer por este tipo de navegadores), es posible encontrar una solución que utiliza el primero de los anteriores enfoques disponibles en una máquina cliente satisfactoria .

Bakedgoods , una biblioteca JavaScript que establece una interfaz uniforme que se puede utilizar para llevar a cabo el almacenamiento conjunto las operaciones en todas las instalaciones de almacenamiento nativos (incluyendo sistema de archivos), y algunos no nativos (incluyendo IsolatedStorage), es un ejemplo de tal solución:

//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
    storageTypes: ["fileSystem", "silverlight"],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

Sólo por el bien de total transparencia, Bakedgoods se mantiene gracias a este tipo aquí :).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top