2011-12-11 11 views
9

Estoy tratando de crear una aplicación web basada en ExtJS, y estoy trabajando en el área de carga de archivos de la aplicación.¿Cómo puedo permitir que los usuarios carguen archivos mediante copiar/pegar?

Quiero que los usuarios puedan cargar archivos copiándolos y pegándolos, no solo copiando y pegando el contenido del archivo, sino el archivo en sí. Por ejemplo, en Windows, puede elegir "Copiar" o "Cortar" en el menú Editar mientras se selecciona un archivo, luego elija "Pegar" más adelante y copie o mueva el archivo - Me gustaría que los usuarios puedan subir archivos a mi aplicación en el paso Pegar, simplemente seleccionando Pegar en su navegador.

Ya he intentado con la API de arrastrar y soltar de HTML5, pero no queremos usar eso, queremos que los usuarios puedan copiar/cortar y pegar archivos para subir sus archivos (siempre y cuando re menor que 20 megabytes). Si el usuario copia la ruta a su archivo y lo pega directamente en la página, diciéndonos dónde encontrar el archivo, eso también podría funcionar.

¿Alguien puede sugerir una forma de hacerlo?

+1

La forma en que Windows maneja eso es con el portapapeles del sistema, que maneja la referencia del archivo que se utiliza para copiar/cortar y pegar en otro lugar. Lo que necesitaría saber es si la ventana del navegador tiene acceso a los identificadores de archivo en el portapapeles durante una operación de copiar/cortar/pegar. Otra opción podría ser una aplicación Flash o Java para extender el navegador. –

+0

gotcha estás diciendo que necesito crear un puente sorta que maneje todas las operaciones de cortar/copiar a la derecha –

Respuesta

6

El hecho es que no puede acceder al sistema de archivos de los clientes con javascript. Esta es la nueva Filesystem API, pero esto solo le permite crear un sistema de archivos de espacio aislado virtual. Tuve el mismo problema, lo pensé un rato y surgieron las siguientes ideas.

  1. flash

    Escribir un puente de Flash que el acceso al sistema de archivos y dejar que los javascript comunicarse con él a través swliveconnect

    Problema: Flash no tiene acceso del sistema de archivos, ya sea.

  2. applet de Java

    Lo mismo que Flash y de nuevo con LiveConnect

    En mi opinión esto podría funcionar, pero yo no lo probé, porque mi objetivo era conseguir el acceso de sistema de archivos un Chromebook. Y ChromeOS no admite Java (al menos sin un poco de piratería)

  3. ActiveX

    También encontré algunas soluciones con este. Me rendí en la parte del applet, así que tampoco lo intenté.

Como dijo Jared Farrish, cuando copias un archivo, el sistema operativo simplemente guarda la ruta al archivo en el portapapeles. Luego, si recibe el evento pegar en su aplicación web, simplemente saque la cadena del portapapeles y reenvíelo a su puente de archivos.

+0

bien gracias por la ayuda me preguntaba sobre las cosas que voy a usar porque voy a construirlo en html 5 es correcto hacer eso! –

+0

oh aquí está el problema de que si ya hay una API en html5 que admite el evento de copiar/pegar como en ese caso necesito ese puente –

+0

Con el evento pegar de la API del Portapapeles, simplemente obtiene la ruta absoluta al archivo. Para acceder realmente al archivo necesita un puente de archivos. –

-1

He visto que DropBox.com permite que esto se haga (en Chrome, no parecía funcionar en IE). No corté y pegué específicamente, sino que arrastré los archivos a una página de Dropbox desde una carpeta local, y cargué los archivos. Por lo tanto, esto no responde directamente a su pregunta, pero tal vez pueda ver cómo se hace en su código.

+0

Has entendido mal la pregunta. No arrastrar y soltar, pero copiar y pegar. – freemanoid

Cuestiones relacionadas