2009-02-24 14 views
36

Estoy trabajando en una aplicación web. Hay un lugar donde el usuario puede cargar archivos con el protocolo HTTP. Existe la opción entre el control de carga de archivos HTML clásico y un applet de Java para cargar los archivos.La mejor manera de cargar varios archivos desde un navegador

La carga de archivos HTML clásico no es muy grande, ya que sólo puede seleccionar un archivo a la vez, y es bastante difícil de conseguir ninguna indicación de progreso durante la carga real (al fin entendí usando un temporizador refrescante un indicador de progreso con datos obtenidos del servidor a través de una llamada AJAX). La ventaja: siempre está funcionando.

Con el applet de Java puedo hacer más cosas: seleccionar varios archivos a la vez (incluso una carpeta), comprimir los archivos, obtener una barra de progreso real, arrastrar y soltar archivos en el applet, etc.
pero hay algunos inconvenientes:

  • es una pesadilla para conseguir que funcione correctamente en Safari de Mac y Mac Firefox (Gracias LiveConnect)
  • la interfaz de usuario no es exactamente la interfaz de usuario nativa y algunas personas notan que
  • el applet no responde tan bien como debería (podría ser mi culpa, pero todo se ve bien para mí)
  • hay errores en la clase Java UrlConnection con HTTPS, por lo que utilizo el cliente HTTP común de Apache para realizar la carga HTTP real. Es bastante grande un paquete y se ralentiza la descarga del archivo .jar
  • cliente HTTP Apache común ha a veces problemas para ir a través de proxys
  • el tiempo de ejecución de Java es bastante grande

He estado manteniendo esta Applet de Java por un tiempo, pero ahora estoy harto de todos los inconvenientes, y considerando escribir/comprar un componente completamente nuevo para cargar estos archivos.

Pregunta

Si tuviera los siguientes requisitos:

  • cargar varios archivos fácilmente desde un navegador, a través de HTTP o HTTPS
  • comprimir los archivos para reducir el tiempo de carga
  • la carga debería funcionar en cualquier plataforma, con interfaz de usuario nativa
  • debe ser capaz de cargar archivos de gran tamaño, hasta 2 gb a t menos
  • que tiene carta blanca en la tecnología

¿Qué tecnología/compontent usaría?


Editar:

  • arrastrar y soltar los archivos en el componente sería una gran ventaja.
  • Parece que hay muchos problemas relacionados con errores con Flash Player (swfupload known issues). La compatibilidad adecuada con Mac y la carga a través de proxies con autenticación son opciones de las que no puedo prescindir. Esto probablemente descartaría todas las opciones basadas en Flash :-(.
  • Elimino todas las opciones HTML/Javascript solamente porque no puede seleccionar más de un archivo a la vez con el control HTML clásico. Es un dolor hacer clic n veces en el botón "examinar" cuando desee seleccionar varios archivos en una carpeta.
+2

¿Qué hay de cargas reanudables? Eso parece realmente importante para mí.A nadie le gusta reiniciar una carga que falló después de un par de horas. –

+0

Es verdad, en ese caso, no creo que todavía pueda usar Flash, solo Java (¿y Silverlight?) –

+0

Hola otro cargador basado en Flash que se puede encontrar en http://digitarald.de/project/fancyupload/ –

Respuesta

4

bien este es mi opinión sobre esto

hice algunas pruebas con swfupload, y tengo mi experiencia previa con Java, y mi conclusión es que cualquier tecnología que se utiliza no existe una solución perfecta para hacerlo subidos en el navegador: siempre va a terminar con errores al cargar archivos de gran tamaño, pasando a través de apoderados, con SSL, etc ...

PERO:

  • un flash uploader (a la swfupload) es muy liviano, no necesita autorización del usuario y tiene una interfaz nativa que es REALMENTE genial, me piensa
  • un cargador de Java necesita autorización pero puede hacer lo que quiera con los archivos seleccionados por el usuario (también conocido como compresión si es necesario) y arrastrar y soltar funciona bien. Sin embargo, prepárate para algunos errores épicos.
  • no he tenido un cambio para jugar con Silverlight, siempre que me gustaría tal vez esa es la verdadera respuesta, aunque la tecnología es aún muy joven así que ... voy a editar este post si me da la oportunidad de violín un poco con Silverlight

Gracias por todas las respuestas !!

+1

Una nota para las personas que encuentran esta respuesta algunos años después. Hemos utilizado SWFUpload durante años y, en general, funciona muy bien. Una cosa a tener en cuenta es que, dado que Flash Player 9 no envía encabezados de Autorización, no funcionará si utiliza la Autenticación de Windows integrada o un servidor proxy que requiere autenticación. Por esta razón, hemos pasado a una solución basada en HTML5. –

0

Hay HTTP/HTTPS controles de carga que permiten carga de varios archivos. Here es uno de Telerik, que he encontrado que es sólido y confiable. La última versión parece tener la mayoría, si no todos, sus requisitos de funciones.

+0

a diferencia de otros Cargadores de AJAX, este está vinculado a .NET, por lo que es inútil – Javier

+0

Además, no puede seleccionar un archivo a la vez. Tal vez quería hablar sobre el control de carga de telerik silverlight. –

3

Existen varios componentes de flash gratuitos que existen con una buena capacidad de carga de archivos múltiples. Hacen uso de la clase ActionScripts FileReference con un receptor PHP (o lo que sea) en el servidor. Algunos han roto recientemente con el lanzamiento de FP10 pero sé con certeza que swfupload funcionará :)

Espero que esto ayude!

0

También puede cargar múltiples archivos con formularios HTTP, como Dave ya señaló, pero si está dispuesto a usar algo más allá de lo que ofrece HTTP y Javascript, consideraría mucho Flash. Incluso hay algunas soluciones preexistentes para él, como MultiPowUpload, y ofrece muchas de las funciones que está buscando. También es más fácil obtener información de progreso utilizando un cliente Flash que con llamadas AJAX de Javascript, ya que tiene un poco más de flexibilidad.

0

Puede consultar el paquete Apache Commons FileUpload. Le permite cargar múltiples archivos, controlar el progreso de la carga, y más. Puede encontrar más información aquí:

http://commons.apache.org/fileupload/
http://commons.apache.org/fileupload/using.html

Buena suerte

+1

Apache Commons Fileupload es una biblioteca del lado del servidor de Java que se utiliza para analizar una publicación HTTP de carga de archivos. Ya tengo esa parte funcionando. Realmente me estoy enfocando en la parte del cliente. –

5

he implementado algo muy recientemente en Silverlight.

Básicamente utiliza HttpWebRequest para enviar un fragmento de datos a un GenericHandler.

En la primera publicación, se envían 4 KB de datos. En el segundo fragmento, envío otro fragmento de 4K.

Cuando se recibe el segundo trozo, calculo el viaje de ida y vuelta entre el primer y el segundo trozo, por lo que ahora el tercer trozo, cuando se lo envíe, sabrá que aumenta la velocidad.

Usando este método puedo cargar archivos de CUALQUIER tamaño y puedo reanudar.

Cada post que enviar junto con esta información:

[PARÁMETROS] [FILEDATA]

Aquí, los parámetros contienen lo siguiente: [Chunk #] [Nombre] [ID de sesión]

Después de recibir cada fragmento, le envío una respuesta a mi Silverlight indicando qué tan rápido se tardó para que ahora pueda enviar un fragmento más grande de .

Difícil poner mi explicación sin código, pero así es básicamente como lo hice.

En algún momento haré una breve reseña sobre cómo lo hice.

+0

Suena genial, quiero intentar hacer esto también. ¡Me encanta que finalmente podamos manipular archivos en el lado del cliente usando código administrado! ¡Larga vida a Silverlight! – TJB

+0

¿Se encontró con problemas en el reproductor siverlight con respecto a la administración de cookies del navegador, proxies, soporte de plataforma? –

+0

Silverlight se ejecuta en el lado del cliente y mi controlador de carga está en el servidor. Como ambos están desconectados de la sesión, pasaría la ID de la sesión a Silverlight al iniciar. Durante la carga, la sesión pasa de Silverlight al controlador, manteniendo todo dentro de una sesión – Gautam

5

nunca he utilizado con archivos de 2 GB de tamaño, pero la YUI File Uploader trabajado bastante bien en un proyecto anterior. Usted también podría estar interesado en este jQuery Plugin.

Dicho esto, sigo pensando que el applet de Java es el camino a seguir. Creo que terminarás con menos problemas de portabilidad y UI de los que esperabas y Drag/Drop funciona muy bien. Para el registro, Box.net utiliza un Applet de Java para sus cargas rápidas de múltiples archivos.

+0

Box.net utiliza un componente flash como primera opción para sus cargas. Ese componente luego proporciona un enlace a un applet de java para los usuarios que desean usar "arrastrar y soltar" –

1

¿qué pasa con google gears?

+0

Buena idea, pero lo que es un poco alarmante es que no es compatible con Mac OS X Snow Leopard: ¡Snow Leopard ha estado fuera durante 2 meses! Lo intentaré en Firefox todo por curiosidad;) ¡Gracias! –

2

¿Qué pasa con estos dos Jupload http://jupload.sourceforge.net/ y jumploader http://jumploader.com/

Ambos son applets de Java, sino que también son a la vez muy fácil de usar e implementar.

+0

Sí, ya he oído hablar de JUpload, nunca tuve la oportunidad/el tiempo para realmente ponerlo a prueba un poco. Sé que cargar en lugar de https es el problema en general (el problema radica en la implementación de JDK. Si JUpload usa la implementación predeterminada, probablemente sufra el problema). –

+0

Acerca de Jumploader: la interfaz de usuario parece realmente agradable, parece admitir HTTPs. Vale la pena mirar en mi opinión :) –

0

La manera más fácil de carga de archivos en Java es la biblioteca GOJFileUpload.jar

Aquí está el tutorial biblioteca gojfileupload:

GOJFileUpload

Ellos dan dos métodos

  • UploadFile (String ruta de archivo , imagenames ArrayList, HttpRequest petición)
  • UploadFile (String filepath , DataName ArrayList, ArrayList imagenames, HttpRequest petición)

volverán Hashmap que el nombre de todos los archivos que se cargó después de subir a la carpeta de destino dado.

Cuestiones relacionadas