2010-08-30 13 views
9

Para aumentar la experiencia del usuario, me gustaría advertir al usuario que el archivo es demasiado grande (digamos> 8M) antes de enviar todo el archivo (lo que puede demorar un poco) al tamaño y la conexión del cliente). Todos los tipos de campos pueden ser "prevalidados" del lado del cliente para una mejor experiencia del usuario, pero estoy atascado en el problema del tamaño del archivo.Advierta al usuario que un archivo es demasiado grande antes de la carga

¿Existe una solución a este problema?

[edit] También estoy abierto a APC para PHP, que cuenta con el rfc 1867. No estoy seguro de si es posible cancelar la carga del formulario si detectamos que el tamaño es demasiado grande. Definitivamente otorgaré recompensa si alguien me muestra cómo hacerlo.

Respuesta

6

¿Qué tal este cargador basado en Flash? http://swfupload.org/

Esto parece convincente

  • degrada con gracia a la forma normal de subida HTML si Flash o Javascript no está disponible
  • tamaño del archivo de control antes de subida comienza

Ya que es de código abierto si estuviera interesado se podría combinar la elegante degradación con otras soluciones HTML5 e IE solo para cubrir la mayoría de las instalaciones del navegador: http://code.google.com/p/swfupload/

+1

+1 para SWFUpload. A pesar de la naturaleza flash (incluso si casi todo el mundo tiene soporte para Flash ...), este es el único componente rico con todas las funciones que he encontrado hace unos años (que es un applet Java firmado ...) que funciona muy bien y no funciona imponer una interfaz de usuario predefinida. También debe agregar que SWFUpload tiene monitoreo de progreso de carga, puede seleccionar varios archivos a la vez, y tiene una cola de carga con posible límite de tamaño, etc. –

+0

+1 y funciona en todos los navegadores principales y tiene una amplia gama de controladores de devolución de llamada. –

5

Puede usar File API en nuevos navegadores que no sean IE 9 o anteriores. He encontrado este tutorial con algunas google: http://www.html5rocks.com/tutorials/file/dndfiles/

Además, la referencia MDC está aquí: https://developer.mozilla.org/en/DOM/File

Por desgracia, no creo que hay una manera en todas las versiones de IE. La respuesta de Flakron cubre 6 y 7 parece, pero no estoy seguro de 8 y no estoy familiarizado con la API de IE. Probablemente necesite ir con un uploder basado en un complemento (Flash, Silverlight o Java).

+0

Los complementos tienen dependencias "fuertes". Me gustaría evitarlo si es posible.Dicho esto, Flash Uploader no sería una mala solución (con un respaldo para una entrada de archivo "clásico", por supuesto). – Savageman

+0

En http://www.html5rocks.com/tutorials/file/dndfiles/ tiene una entrada de archivo de demostración. Comprobado y funciona también con IE10 (Windows7), por lo que parece que esta es una forma recomendada para las producciones actuales y particularmente en futuras. –

1

¿Existe una solución a este problema?

Creo que terminará lamentándose por elegir un tamaño "demasiado grande" para advertirlo, porque la velocidad de transferencia es la verdadera determinación del rendimiento.

Es mejor simplemente mostrar el tiempo estimado de finalización junto con una opción de cancelación. Un termómetro de progreso también es bueno. De esta forma, el usuario puede decidir si tomará demasiado tiempo, independientemente del tamaño del archivo o la velocidad de conexión, y nunca tendrá que volver atrás y modificar el límite "demasiado grande" elegido cuando las grandes cargas pasadas se conviertan en futuras tareas menores debido a al inevitable rendimiento aumenta.

+0

¿Cómo sabría el tiempo estimado de finalización en HTML con una carga HTTP? El servidor no sabe qué tan grande es el archivo hasta que el navegador haya terminado de subir todo el archivo, ¿verdad? –

+0

A menos que tenga un verdadero "demasiado grande" en el back-end. – Joshua

+0

Sí, el control de HTML de una carga HTTP no es una GUI agradable. Pruebe http://www.google.com/search?q=upload+progress –

Cuestiones relacionadas