Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - vb.net file downloader
Forum - C# / VB.NET - vb.net file downloader

Avatar
blackboss (Normal User)
Pro


Messaggi: 63
Iscritto: 19/08/2009

Segnala al moderatore
Postato alle 23:49
Mercoledì, 22/08/2012
Salve a tutti, sto cercando di trovare un modo per scaricare dei files da internet. Il problema è che vorrei conoscere l'estensione del file prima di scaricarlo... Inoltre avrei bisogno di salvarlo col nome originario anche se l'indirizzo è del tipo www.esempio.it/id=download1 e che quindi non contiene il nome del file. Grazie in anticipo!

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 23:03
Sabato, 25/08/2012
Per scaricare:

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2.  
  3. Dim WithEvents WClient_Video As New WebClient
  4.  
  5. WClient_Video.DownloadFileAsync(New Uri(Url), Path)



Per il nome del file lo devi ricavare dalla pagina da cui stai scaricando! Quindi devi fare un parser HTML!
:k:

PM Quote
Avatar
blackboss (Normal User)
Pro


Messaggi: 63
Iscritto: 19/08/2009

Segnala al moderatore
Postato alle 19:06
Domenica, 02/09/2012
@LittleHacker
Scusa per non averti risposto subito... Grazie per l'aiuto, ma il problema non e' scaricare i files (conoscevo gia' il webclient). Cio' che non riuscivo a fare era ottenere l'esatto nome del file e leggermi tutta la pagina di provenienza per trovarlo mi sembra troppo laborioso. Visto che la funzione non e' fondamentale, ho rinunciato!

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 11:34
Lunedì, 03/09/2012
Testo quotato

Postato originariamente da blackboss:
Cio' che non riuscivo a fare era ottenere l'esatto nome del file e leggermi tutta la pagina di provenienza per trovarlo mi sembra troppo laborioso. Visto che la funzione non e' fondamentale, ho rinunciato!



Perchè? Io quando dovevo trovare la stringa dove era scritto il nome del file andavo sul sorgente della pagina e facevo una ricerca con F3, ad esempio il nome del file era: pippo.dll, allora io andavo a ricercare il nome del file, e guardavo dove era scritto il nome, ad esempio: <name_file>pippo.dll</name_file>, allora io inserivo un webclient che mi scaricasse l'intera pagina in una stringa, e poi con i vari Split, andavo a splittare prima della stringa e dopo la stringa e poi mi ritrovato con <name_file>pippo.dll</name_file>, nella stringa inizializzata sul mio programma e a quel punto inizializzavo un'altra stringa e in questa gli dicevo allo split di prendermi solo in nome.

Un piccolo esempio

Codice sorgente - presumibilmente VB.NET

  1. Dim WithEvents WClient_HTML As New WebClient
  2.  
  3. dim a as string = WClient_HTML.DownloadStringAsync("www.google.it")
  4. dim s() as string = Split(a, "<name_file>")
  5. dim s1() as string = Split(s(1), "</name_file>")
  6. dim namefile as string = s1(0)



Come risultato ho: pippo.dll!

Il discorso è diverso se invece tu vuoi fare un multi file downloader, cioè che puoi scaricare da più siti, li dovresti trovare ogni stringa, di ogni sito, e dirgli al programma che quando l'url contiene un nome conosciuto allora di fare una ricerca con uno Split dedicato!

Piccolo esempio:
Codice sorgente - presumibilmente VB.NET

  1. Dim WithEvents WClient_HTML As New WebClient
  2.  
  3. if TextUrl.Text.Contains("www.facebook.com") then
  4. dim a as string = WClient_HTML.DownloadStringAsync(TextUrl.text)
  5. dim s() as string = Split(a, "<name_file>")
  6. dim s1() as string = Split(s(1), "</name_file>")
  7. dim namefile as string = s1(0)
  8. else if TextUrl.Text.Contains("www.google.com") then
  9. dim a as string = WClient_HTML.DownloadStringAsync(TextUrl.text)
  10. dim s() as string = Split(a, "<google_file>")
  11. dim s1() as string = Split(s(1), "</google_file>")
  12. dim namefile as string = s1(0)
  13. end if



Spero che tu abbia capito tutto :rotfl: e la cosa più importate che ti sia stato d'aiuto!
Ciao :k:

PM Quote
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 15:23
Venerdì, 14/09/2012
mi ero fatto una funzione per un mio programma proporio qualche giorno fa:

Codice sorgente - presumibilmente VB.NET

  1. Private Function filename(ByVal link As String)
  2.         Dim webrequest As HttpWebRequest = HttpWebRequest.Create(link)
  3.         webrequest.AllowAutoRedirect = False
  4.         Dim webresponse As HttpWebResponse = webrequest.GetResponse
  5.         Dim n As String = webresponse.GetResponseHeader("Location")
  6.         If n = "" Then
  7.             n = webresponse.GetResponseHeader("Content-Disposition")
  8.             If n.Contains("filename=") Then
  9.                 n = n.Replace("filename=", "?")
  10.             Else : n = ""
  11.             End If
  12.             Dim x() As String = n.Split("?")
  13.             Dim fullname As String = x(x.Length - 1)
  14.             webresponse.GetResponseStream.Close()
  15.             If n = "" Then
  16.                 Dim url As New Uri(link)
  17.                 Dim fullname1 As String = url.LocalPath.Split("/")(url.LocalPath.Split("/").Length - 1)
  18.                 Return fullname1
  19.             End If
  20.  
  21.             Return fullname
  22.         Else
  23.             Dim x() As String = n.Split("/")
  24.             Dim fullname As String = x(x.Length - 1)
  25.             fullname = fullname.Split("?")(0)
  26.             webresponse.GetResponseStream.Close()
  27.             Return fullname
  28.         End If
  29.     End Function



dovrebbe funzionarti...l'ho testata su vari downloads e per ora non ho avuto problemi...
l'esempio di littlehacker non l'ho capito molto bene...:rotfl:

PM Quote
Avatar
blackboss (Normal User)
Pro


Messaggi: 63
Iscritto: 19/08/2009

Segnala al moderatore
Postato alle 14:57
Domenica, 23/09/2012
Scusate ma ho avuto un problema al computer per cui non sono potuto andare su internet per un bel po', grazie a tutti per gli aiuti!

PM Quote