2009-10-12 15 views
5

Disculpe mi ignorancia sobre el tema.Descarga de varias partes en C#?

Me gustaría escribir una aplicación en C# que pueda descargar archivos de un servidor de la misma manera que DownThemAll. DownThemAll parece abrir cuatro conexiones al servidor HTTP para descargar el mismo archivo. Me preguntaba si hay bibliotecas existentes que puedan hacer esto.

Aquí es una cita de su sitio acerca de esta característica:

DownThemAll presenta una técnica de descarga inteligente llamado ‘descarga de varias partes’. Divide los archivos en varias secciones, que se descargan simultáneamente.

También me gustaría poder pausar/reanudar las descargas. Esa es la funcionalidad básica que me gustaría, no necesariamente necesito una biblioteca completa de administradores de descargas, pero si hay una que pueda hacer estas cosas, me encantaría saber sobre ellos también. Los archivos están en un directorio protegido con contraseña alojado con lighttpd, por lo que también necesitaría alguna forma de autenticarme.

Si no hay ninguna biblioteca preexistente que pueda usar, ¿a qué clases de .NET debo buscar que pueda hacer esto?

Gracias!

EDIT: Se volvió a escribir el título para ser más apropiado y se agregó una cita del sitio DownThemAll explicando de qué se trata.

2a Edición: Creo Svens publican la respuesta más adecuada hasta el momento, aunque como un comentario:/Es mi culpa ya que misworded el título, ya que no sabía lo que estaba hablando. Publicó un article que pasa por la pausa/reanudación de la descarga de HTTP. También habla de la cabecera Range que es lo que creo que tengo que usar:

La cabecera de la gama es capaz de pedir más de un rango en una única solicitud, una característica llamada "rangos de varias partes." No confunda esto con la descarga segmentada, que utilizan casi todas las herramientas de descarga para aumentar la velocidad de la descarga. Estas herramientas pretenden mejorar la velocidad de descarga abriendo dos o más conexiones simultáneas, cada una de las cuales solicita un rango diferente del archivo.

Así que lo tomo Quiero usar el rango para descargar ciertas partes del archivo al mismo tiempo. Por otra parte, esto probablemente no tiene ninguna ventaja sobre simplemente descargar el archivo de una vez. Haré eso y permitiré pausar/reanudar.

Gracias chicos!

P.S svens, adelante publique el comentario como una respuesta para que yo pueda aceptarlo si lo desea.

+2

http://www.devx.com/dotnet/Article/22533/0/page/2 describe cómo se reanudan las descargas en el protocolo http, http://www.codeproject.com/KB/IP/pauseresume.aspx describe cómo hacerlo con servidores ftp. – svens

+0

Eso podría haber sido una respuesta, creo. El mismo método podría ser cómo descargan trozos separados del archivo, y de alguna manera lo juntan una vez que los trozos están terminados. –

+0

Esta práctica es realmente mala para el servidor y se realizan esfuerzos para bloquear dichos intentos de descarga. El truco aumentó en los tiempos de los módems de acceso telefónico cuando las personas intentaban sacar todo de él. Solo sé amable y descárgalo en una conexión. EDITAR: Este método fallará en MI servidor por varias razones. Tengo algo para arrojar palos bajo los pies de los leechers. – Zdenek

Respuesta

2

estoy con Svens sobre esto, http://www.devx.com/dotnet/Article/22533/0/page/2 parece decirlo todo.

+0

Gracias. Como él lo dijo primero, esperaré un rato para ver si lo publica como respuesta para poder aceptarlo. De lo contrario, irá a usted por el bien del cierre de esta pregunta. –

1

La clase System.Net.HttpClient debería poder descargar sus archivos. Simplemente llame a esta clase desde un subproceso o un grupo de subprocesos y podrá descargar muchos archivos al mismo tiempo.

+1

Gracias, lo aprecio, pero no quise decir que quiero descargar varios archivos al mismo tiempo. DownThemAll abre cuatro conexiones al servidor HTTP de alguna manera para descargar el archivo/same /. –

+0

HttpClient es probablemente más fácil que Http.Get ... +1 – overstood

+1

Se refieren a él como "descarga en varias partes". –

3

perdón de la publicación de un artículo más antiguo que el Cristo, pero esto:

http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M

parece estar más cerca de lo que se pedía.

La 'respuesta correcta' marcada actualmente es buena para suministrar la rutina de descarga parcial del lado del servidor, de alguna manera sirve para explicar lo que hacen los encabezados del rango HTTP, pero no es un cliente de descarga.

+0

Claro que se ve bien. Tener un voto favorable. –

Cuestiones relacionadas