¿Hay alguna manera de “vistazo” a un archivo mientras se está de subir a través de HTTP en un cuadro de Windows?

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

Pregunta

Tengo que añadir una función de carga de archivos a un sitio web ASP.NET y me gustaría ser capaz de leer una pequeña parte del archivo en el servidor mientras aún está la posibilidad de subir. Una función de vista previa o peek tipo por lo que puede determinar el contenido y darle un poco de información al usuario, mientras que todavía se está subiendo (estamos hablando de archivos de gran tamaño aquí). ¿Hay alguna manera de hacer esto? Estoy pensando en el peor caso de escribir un control personalizado que carga solamente un número fijo de bytes del archivo una vez elegida y luego bajo las sábanas comienza otra carga del archivo completo. No del todo seguro de que incluso esto es posible, pero estoy buscando una solución más elegante de todos modos ... Gracias!

¿Fue útil?

Solución

Parece que usted quiere evitar la "pantalla en blanco de la muerte" durante la carga de archivos grandes. Si es así, es posible que desee ver en de control RadUpload Telerik, que proporciona una barra de progreso durante la carga.

Si quieres liar, me descompilar su copia de prueba para las ideas. He asome en su origen de esta manera, y que logran la barra de progreso a través de una combinación de una costumbre HttpModule y HttpHandler junto con su control. Las rutas de controlador del archivo de un modo streaming mientras que el módulo proporciona "porcentaje completado" información - o al revés; que ha sido un par de años desde que la miraba.

Editar

  

En realidad, yo estoy tratando de hacer el procesamiento del lado del servidor que el archivo está siendo cargado. Quiero importar datos de usuario a través de HTTP, pero que quieren presentar al usuario de vista previa / opciones de cómo procesaremos sus datos, mientras que el archivo todavía se está subiendo (definiciones de columna, etc.). No importa qué, vamos a tomar el archivo tal cual, por lo que no es necesario interrumpir la subida. Dado que yo quiero en realidad la interacción durante la carga basado en la lectura de una porción relativamente pequeña del archivo, ya que está siendo cargado, le recomendaría el mismo enfoque?

Bueno ... sería muy difícil de hacer, y no podría funcionar a través del navegador, pero podría ser hecho con este enfoque.

Ya que es perfectamente posible trabajar con el archivo de entrada como una corriente como he mencionado, usted podría tener su actualización de procesamiento intial de algún estado como parte de ese proceso de la corriente. Si no se procesa como una corriente, usted tiene que esperar a que la carga completa del archivo antes de poder hacer nada con ella.

El problema es el siguiente: durante la carga de archivos, no se puede tener ninguna interacción más basada en HTML. El puesto debe continuar sin disminuir la carga o fallará. El control he vinculado sólo funciona en absoluto, porque la mayoría de los navegadores permiten al JavaScript continuar para ejecutar y actualizar la página DOM durante el período posterior.

Así que para que esto funcione, usted tiene que actualizar algunos del lado del servidor estado normalizado durante su procesamiento de archivos en el HttpModule, que se transmite de vuelta al cliente a través de llamadas XMLHTTPRequest manejados por el HttpHandler. Usted tiene que utilizar puro Javascript / DOM para actualizar la interfaz de usuario para el usuario.

Así que, como he dicho, es compleja y probablemente sea con errores entre navegadores, pero en teoría se podría hacer.

Hay alernatives que podrían ser más estable, pero no necesariamente podrían ser factible: se podría construir un control ActiveX o un clic-Una vez que la aplicación .NET que preprocesa el archivo antes de cargar, y tal vez incluso de forma asíncrona, mientras que transfiere el archivo el usuario continúa navegando. Algunos usuarios no les gusta esa opción, y no sé los detalles de su escenario de implementación, pero es una opción.

Otros consejos

Hay un método HTTP HEAD pero no PEEK.

HEAD le dará información y las cabeceras sobre el archivo.

Por supuesto, se puede hacer un controlador de solicitudes especial que hace cualquier cosa que desee. Usted no tiene que trabajar con recursos estáticos, puede crear dinámicamente cualquier respuesta que desea.

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