2009-10-12 16 views
5

Per favore scusate la mia ignoranza sull'argomento.Download multipart in C#?

Mi piacerebbe scrivere un'applicazione in C# che può scaricare file da un server nello stesso modo DownThemAll. DownThemAll sembra aprire quattro connessioni al server HTTP per scaricare lo stesso file. Mi stavo chiedendo se ci sono eventuali librerie esistenti che potrebbero farlo.

Ecco una citazione dal loro sito a proposito di questa funzione:

DownThemAll dispone di una tecnica intelligente scaricare chiamata ‘multipart download’. Divide i file in più sezioni, che vengono scaricate contemporaneamente.

Vorrei anche essere in grado di mettere in pausa/riprendere i download. Questa è la funzionalità di base che vorrei, non ho necessariamente bisogno di una libreria di download manager completa, ma se ce n'è una che può fare queste cose allora mi piacerebbe anche saperle. I file sono in una directory protetta da password ospitata con lighttpd, quindi avrei anche bisogno di un modo per autenticarmi.

Se non ci sono librerie pre-esistenti che posso usare, allora quali classi .net dovrei esaminare che potrebbero essere in grado di fare ciò?

Grazie!

EDIT: ha riformulato il titolo per essere più appropriato e ha aggiunto una citazione dal sito DownThemAll che spiega di cosa si tratta.

2 ° EDIT: credo che svens abbia postato la risposta più appropriata finora, anche se come commento:/È colpa mia perché ho sbagliato il titolo perché non sapevo di cosa stavo parlando. Ha pubblicato uno article che va a scaricare/riprendere il download HTTP. Si parla anche l'intestazione Range che è quello che penso che dovrei usare:

L'intestazione Range è in grado di chiedere più di un intervallo in una singola richiesta, una funzione denominata "gamme più parti." Non confondere questo con il download segmentato, che quasi tutti gli strumenti di download utilizzano per aumentare la velocità del download. Questi strumenti sostengono di migliorare la velocità di download aprendo due o più connessioni simultanee, ognuna delle quali richiede un intervallo diverso del file.

Quindi, lo prendo Voglio usare l'intervallo per scaricare alcune parti del file contemporaneamente. Di nuovo, questo probabilmente non ha alcun vantaggio rispetto al semplice download del file in una volta sola. Lo farò e permetterò la pausa/ripresa.

Grazie ragazzi!

svens P.S, vai avanti e pubblica il commento come risposta in modo che io possa accettarlo se vuoi.

+2

http://www.devx.com/dotnet/Article/22533/0/page/2 descrive come vengono ripristinati i download nel protocollo http, http://www.codeproject.com/KB/IP/pauseresume.aspx descrive come farlo con i server ftp. – svens

+0

Questa potrebbe essere una risposta, penso. Lo stesso metodo potrebbe essere il modo in cui scaricano pezzi separati del file, quindi in qualche modo lo mettono insieme una volta che i blocchi sono finiti. –

+0

Questa pratica è in realtà cattiva per il server e vengono fatti sforzi per bloccare tali tentativi di download. Il trucco è aumentato nei tempi dei modem dial-up quando le persone cercavano di spremere tutto fuori di esso. Basta essere carini e scaricare in un'unica connessione. EDIT: questo metodo fallirebbe sul mio server per diversi motivi. Ho una cosa per lanciare bastoni sotto i piedi dei leechers. – Zdenek

risposta

2

Sono con Svens su questo, http://www.devx.com/dotnet/Article/22533/0/page/2 sembra dire tutto.

+0

Grazie. Poiché l'ha detto per primo, aspetterò un po 'per vedere se lo pubblica come risposta in modo che io possa accettarlo. Altrimenti andrà da te per la chiusura di questa domanda. –

1

La classe System.Net.HttpClient dovrebbe essere in grado di scaricare i file. Basta chiamare questa classe da un thread o un pool di thread e puoi scaricare molti file allo stesso tempo.

+1

Grazie, lo apprezzo, ma non volevo dire che voglio scaricare vari file allo stesso tempo. DownThemAll apre quattro connessioni al server HTTP in qualche modo per scaricare lo/same/file. –

+0

HttpClient è probabilmente più semplice di Http.Get ... +1 – overstood

+1

Si riferiscono ad esso come "download multipart". –

3

perdono il distacco ad un articolo vecchio di Cristo, ma questo:

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

sembra essere più vicino a quello che è stato chiesto.

La "risposta corretta" correntemente contrassegnata è buona per fornire la routine di download parziale lato server, in qualche modo deve spiegare cosa fanno le intestazioni HTTP Range, ma non è un client di download.

+0

Certo che sembra buono. Avere un upvote –