Como descargo un archivo de internet ( EN PARTES ). Alguien sabe?

Iniciado por 70N1, 24 Marzo 2010, 18:59 PM

0 Miembros y 1 Visitante están viendo este tema.

70N1

Pues lo que dice mi titulo.

Quiero descargar un archivo diciendole en que parte del archivo ahi que empezar a descargar.

Alguna informacion?
70N1

elmaro

Te quieres hacer un administrador de descargas?
A mi también me serviría el code jeje

MANULOMM

Primero deberas crear un hilo por cada parte, segundo es obtener el tamaño total del archivo, dividirlo por el numero de partes y empizas a descargar simultaneamente (Correr los  Hilos) cuando los hilos terminan tendras por cada hilo un memorystream, deberas unirlos... ya hasta me dieron ganas de hacerlo... jejejeje

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


[D4N93R]


raul338

Emm... creo yo o el tipo pregunto otra cosa :huh: jaja

Lo que yo entendi como pregunta es como decirle al servidor desde que punto descargar el archivo. Eso hay que hacerlo aun con los hilos, sino descargas tantas veces como hilos tengas :P va a ser totalmente al pedo.

Como iniciar una descarga a partir de X punto? creo que esa fue la pregunta :P (o si no lo era, es algo importante para hacer esto)

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

70N1

Mi intencion es bajar una pelicula de megavideo con extensión flv.
Como megavideo pone un limite de tiempo...  pues e pensado en descargar el archivo partiendolo en partes y luego unirlas para tener la pelicula completa.

Estoy mirando las paginas que me as dado...
70N1

Novlucker

Entonces si es eso :P
El primero es en C# y el segundo en VB.net, y por lo que parece es sencillo :D

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

70N1



  Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

        'Creating the request and getting the response
        Dim theResponse As HttpWebResponse
        Dim theRequest As HttpWebRequest
        Try 'Checks if the file exist

            theRequest = WebRequest.Create(Me.txtFileName.Text)
            theResponse = theRequest.GetResponse
        Catch ex As Exception

            MessageBox.Show("An error occurred while downloading file. Possibe causes:" & ControlChars.CrLf & _
                            "1) File doesn't exist" & ControlChars.CrLf & _
                            "2) Remote server error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

            Me.Invoke(cancelDelegate, True)

            Exit Sub
        End Try
        Dim length As Long = theResponse.ContentLength 'Size of the response (in bytes)

        Dim safedelegate As New ChangeTextsSafe(AddressOf ChangeTexts)
        Me.Invoke(safedelegate, length, 0, 0, 0) 'Invoke the TreadsafeDelegate

        Dim writeStream As New IO.FileStream(Me.whereToSave, IO.FileMode.Create)

        'Replacement for Stream.Position (webResponse stream doesn't support seek)
        Dim nRead As Integer

        'To calculate the download speed
        Dim speedtimer As New Stopwatch
        Dim currentspeed As Double = -1
        Dim readings As Integer = 0

        Do

            If BackgroundWorker1.CancellationPending Then 'If user abort download
                Exit Do
            End If

            speedtimer.Start()

            Dim readBytes(4095) As Byte
            Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096) ******AYUDA********

            nRead += bytesread
            Dim percent As Short = (nRead * 100) / length

            Me.Invoke(safedelegate, length, nRead, percent, currentspeed)

            If bytesread = 0 Then Exit Do

            writeStream.Write(readBytes, 0, bytesread)

            speedtimer.Stop()

            readings += 1
            If readings >= 5 Then 'For increase precision, the speed it's calculated only every five cicles
                currentspeed = 20480 / (speedtimer.ElapsedMilliseconds / 1000)
                speedtimer.Reset()
                readings = 0
            End If
        Loop

        'Close the streams
        theResponse.GetResponseStream.Close()
        writeStream.Close()

        If Me.BackgroundWorker1.CancellationPending Then

            IO.File.Delete(Me.whereToSave)

            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

            Me.Invoke(cancelDelegate, True)

            Exit Sub

        End If

        Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

        Me.Invoke(completeDelegate, False)

    End Sub




theResponse.GetResponseStream.Read(readBytes, 0, 4096) ******AYUDA********

Donde 0 es el numero donde empieza la descarga?
70N1

Novlucker

#9
CitarResume Downloads

It is possible to modify the code to allow resuming downloads. Add this code before the first use of the HttpWebRequest object.
Código (vbnet) [Seleccionar]
theRequest.AddRange(whereYouWantToStart) '<- add this

You'll also need to set the Position property of the FileStream instance to the position where you want to resume the download. So be sure you also save this before the download is cancelled.
Código (vbnet) [Seleccionar]
Dim writeStream As New IO.FileStream(Me.whereToSave, IO.FileMode.Open)
writeStream.Position = whereYouWantToStart

Para revisar donde comenzar debes de leer el archivo anterior para ver hasta donde guardaste

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein