31 messaggi dal 21 luglio 2006
Ho la necesssità di scaricare da una pagina web un file zippato, ho scritto il seguente codice:
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ServicePointManager.SecurityProtocol = 3072

        Dim client As New WebClient()
        AddHandler client.DownloadProgressChanged, AddressOf ShowDownloadProgress
        AddHandler client.DownloadFileCompleted, AddressOf OnDownloadComplete
        client.DownloadFileAsync(New Uri("http://www1.agenziaentrate.gov.it/servizi/TafDis/download.php?&tipofile=TAF&iduff=OR1"), My.Computer.FileSystem.SpecialDirectories.Desktop & "/Dist.zip")


    End Sub

    Private Sub OnDownloadComplete(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
        If Not e.Cancelled AndAlso e.Error Is Nothing Then
            MessageBox.Show("DOwnload success")
        Else
            MessageBox.Show("Download failed")
        End If
    End Sub

    Private Sub ShowDownloadProgress(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
        ProgressBar1.Value = e.ProgressPercentage
    End Sub 

Il codice funziona perfettamente, riesco a scaricare il file, ma la progressBar non visualizza l'avanzamento del download o meglio visualizza l'intero avanzamento a download completato. Penso che non riesce a leggere la percentuale di avanzamento (e.ProgressPercentage. Come posso risolvere il problema?
Grazie
Modificato da gsprogetti il 03 ottobre 2018 09.49 -

Giorgio
31 messaggi dal 21 luglio 2006
Nessuno mi può aiutare in merito al quesito posto il 03/10/2018?

Giorgio
10.957 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio,
il problema è nel server dell'agenzia delle entrate che non sta includendo l'intestazione Content-Length nella risposta. Ecco infatti l'elenco completo delle intestazioni della risposta, da cui il tuo WebClient non può evincere il peso totale del file che sta scaricando.
HTTP/1.1 200 OK
Date: Wed, 10 Oct 2018 10:55:57 GMT
Server: Apache
X-Powered-By: PHP/5.2.9
Content-Description: Scarico Monografie
Content-Transfer-Encoding: binary
Content-Disposition: attachment; filename=TAF.zip
Cache-Control: post-check=0, pre-check=0
Connection: close
Transfer-Encoding: chunked
Content-Type: application/zip



Quindi è anche impossibile per il WebClient capire quale percentuale ha scaricato.
Comunque, il metodo ShowDownloadProgress viene invocato molteplici volte, ma in tutte le sue esecuzioni (tranne l'ultima) il valore di e.ProgressPercentage è 0.
Se invece prendi in considerazione il valore di e.BytesReceived noterai che aumenta ad ogni invocazione.

Se vuoi assolutamente mostrare una barra d'avanzamento, devi ricorrere ad un'approssimazione. In questo caso dovresti salvarti da qualche parte il peso del file che hai scaricato e lo usi per calcolarti la percentuale la prossima volta che l'utente va a scaricare lo stesso file. Questo può funzionare fintanto che il file ha approssimativamente lo stesso peso.

ciao,
Moreno

Enjoy learning and just keep making
31 messaggi dal 21 luglio 2006
Ciao Moreno,
il peso del file è variabile, viene aggiornato ogni mese, pertanto sto pensando di eliminare la progressbar e visualizzare il valore dei bytes scaricati, cosa ne pensi? O hai qualche suggerimento alternativo?
Grazie

Giorgio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.