2010-10-14 10 views
20

para el almacenamiento de datos fuera de línea módulo web pueden utilizar:Almacenamiento sin conexión HTML5. ¿Almacenamiento de archivos? Directorios y sistemas de archivos API

Pero aparentemente no hay Almacenamiento de archivos. Por supuesto, hay un manifest-based caching, pero es solo un caché y no se supone que se use como almacenamiento de datos de usuario.

¿Significa que el usuario de WebApp está obligado a utilizar algún tipo de almacenamiento de archivos en la nube?

¿Hay alguna forma de guardar archivos grandes en la máquina local del usuario? ¿O tal vez una forma de seleccionar una aplicación web de carpeta local puede usarse para almacenar datos de usuario?

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

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

Similarquestions.

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

Respuesta

17

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

I’ll have the DOMFileSystem with a side of read/write access please escribió:

Eric Uhrhane de Google ha sido trabajando en el borrador de trabajo del File API: Directories and System specification que define un conjunto de API para crear un sistema de archivos de espacio aislado en una aplicación web puede leer y escribir datos a.

¡Guau! ¡Estoy muy emocionado!

+4

Votación por no darse por vencido y siempre mirando. Y felicitaciones por regresar y proporcionar una actualización. – mt3

2

Por razones de seguridad, no puede escribir archivos en el sistema de archivos local de un usuario en caso de que se utilice con fines nefastos por personas malvadas.

Eso no es probable que cambie, y eso es algo bueno.

+0

Creo que eso no es algo bueno. Las WebApps son cada vez más "en la nube" y menos "gratuitas". ¿Qué hay de la implementación de bloc de notas fuera de línea en HTML5? – Vanuan

+2

No estoy diciendo acerca del sistema de archivos local. Algún sistema de archivos virtual "sandbox" estaría bien. HTML5 ya tiene la capacidad de leer y escribir bases de datos SQL compartidas. ¿Qué hay de asignar una carpeta vacía para la aplicación web para almacenar sus datos? – Vanuan

3

Hay una manera de guardar archivos relativamente grandes en el disco duro de un usuario si está dispuesto a usar Flash. Mira en Downloadify:

http://www.bitrepository.com/downloadify-client-side-file-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 almacenar los datos a través de uno de los métodos enumerados, Webstorage, base de datos sqlite, etc. Coloque todos sus activos, incluido el archivo SWF en el archivo de manifiesto, de modo que todo esté guardado en la memoria caché localmente. A continuación, puede extraer información de su base de datos o almacén web y utilizar el archivo SWF para crear los archivos que necesita.

No estoy seguro de si podrá volver a leer estos archivos en su aplicación web.

Otra opción para guardar datos es mediante el uso de etiquetas de enlace con el data URI scheme. Sin embargo, no estoy seguro si es compatible con todos los principales navegadores en este momento.

+1

La versión actual de todos los principales navegadores admite URI de datos, pero IE8 está limitada a 32 KB, lo que limita su utilidad para archivos "grandes". – Ken

6

¿Por qué no utilizar localStorage mientras el usuario está editando un documento y la API FileWriter cuando quieren guardarlo en el disco? La mayoría de las personas está acostumbrada a ver un cuadro de diálogo para guardar cuando se guarda un documento.

El único escenario que se me ocurre que garantiza el acceso sin usuario a la API FileWriter es una función de autoguardado, pero guardar automáticamente en localStorage puede ser igual de bueno.

+2

Otro escenario es un reproductor multimedia. ¿Cómo se supone que una aplicación HTML5 debe reproducir los archivos del usuario? – Vanuan

+1

Probablemente podría hacer un reproductor multimedia primitivo con un '' (para permitirle al usuario seleccionar el archivo) y JavaScript (para establecer el atributo 'src' del'

0

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

0

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

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

  • implementaciones de la API existe actualmente sólo en los navegadores basados ​​en cromo (cromo & Opera)
  • Tanto de la API fueron tomadas fuera de los estándares del 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
  • un sandbox (una ubicación en el disco fuera de la cual los archivos no pueden producir ningún efecto) se usa para almacenar los archivos creados con las API
  • sistema de archivos virtual (una estructura de directorio que no existe necesariamente en el disco del mismo forma que lo hace cuando se accede desde dentro del navegador) se utiliza representan los archivos creados con la API de

IsolatedStorage, que no se ha mencionado hasta el momento, también permite el archivo de E/S de una pestaña/ventana contexto, pero está disponible solo a través de Silverlight y requiere el uso de managed code para acceder. Al igual que FileSystem, también existe en un entorno limitado y hace uso de un sistema de archivos virtual.

Dada la gran penetración en el mercado tanto de los navegadores basados ​​en Chromium como de Silverlight (soporte que, curiosamente, se ha descartado por tales navegadores), puede encontrar una solución que utiliza el primero de los enfoques anteriores disponibles en una máquina cliente satisfactorio.

BakedGoods, una biblioteca de Javascript que establece una interfaz uniforme que puede usarse para realizar operaciones de almacenamiento comunes en todas las instalaciones de almacenamiento nativas (incluido FileSystem) y algunas no nativas (incluido IsolatedStorage). :

//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){} 
}); 

Solo por el bien de la transparencia completa, BakedGoods es mantenido por este tipo aquí :).

Cuestiones relacionadas