Datei von einer Website herunterladen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von sunshine.

    Datei von einer Website herunterladen

    Hallo,

    ich bin leider nicht so vertraut mit VB und möchte gerne folgende Anfrage stellen. Ich möchte über eine Anwendung mittels eines Buttons eine bestimmte Datei aus dem Internet herunterladen und auf ein bestimmtes Laufwerk auf dem Rechner stellen. Das klappt leider nicht und ich verstehe die Ablehnung nicht. Folgendes einfaches Beispiel klappt nicht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. My.Computer.Network.DownloadFile("https://www.ok-bergbahnen.com/api/download/image/?dltoken=eyJzdG9yYWdlIjoiMTI5Mjg0MSIsInRpbWUiOjE3MDk2MTAzNDl9.QA3CKlDZ09k8oe4kAYobdALYjhvASlT7A7lNE_YwceM", "D:\Downloads\test.pdf")
    4. End Sub
    5. End Class

    Es kommt WebException wurde nicht behandelt. Die Erklärungen/Hilfen dazu verstehe ich nicht. Das ist mir zu fachlich. Ggf. kann mir jemand helfen. Würde mich sehr freuen. :)

    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [✱ Neues Thema] klickt.
    CodeTags gesetzt
    ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Bei mir funktioniert der Code.
    Was ist der konkrete und vollständige Wortlaut der WebException?
    Warum soll eine Bilddatei den Namen einer PDF-Datei erhalten? Eine Umwandlung des Dateityps findet dadurch ja nicht statt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Grundsätzlich gilt: nehme nicht das ​My-Namespace von VB.
    Auch wenn es mehr Arbeit ist, solltest du die Funktionen des Frameworks nutzen.

    (mein VB ist rostig, deshalb vorher unbedingt schauen, ob das so funktioniert und ggf. auch Google verwenden, für Details)

    VB.NET-Quellcode

    1. private async sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. dim httpCl = new HttpClient()
    3. ' Try
    4. dim response = await httpCl.GetAsync(new Uri("https://www.ok-bergbahnen.com/api/download/image/?dltoken=eyJzdG9yYWdlIjoiMTI5Mjg0MSIsInRpbWUiOjE3MDk2MTAzNDl9.QA3CKlDZ09k8oe4kAYobdALYjhvASlT7A7lNE_YwceM"))
    5. ' Catch ex As Exception
    6. ' hier ggf Fehler behandeln
    7. ' end try
    8. using fStream = new FileStream("D:\my_file.pdf")
    9. await response.Content.CopyTo(fStream)
    10. end using
    11. end sub


    Zu deinem konkreten Fehler: Funktioniert der Link in deinem Browser? Oft genug haben Server strenge Sicherheitsmaßnahmen, die bei zu vielen Anfragen greifen. Das würde erklären, warum es bei @VaporiZed funktioniert.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Zu VaporiZed: Ich habe mich bei der PDF vertan. Soll natürlich eine jpg in diesem Beispiel sein. Später, beim richtigen Programm, dann eine ZIP. Die Fehlermeldung lautet:

    Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen.
    Bitte überprüfen Sie die Response-Eigenschaften der Ausnahme, um zu bestimmen, warum die Anforderung nicht ausgeführt werden konnte.
    Überprüfen Sie die Status-Eigenschaft, um zu bestimmen, warum die Anforderung nicht ausgeführt werden konnte.


    Zu siycah: Der Link läuft auf dem Edge-Browser einwandfrei. Dein Code läuft bei mir nicht. Schon dim httpCl = new HttpClient() bockt schon...

    siycah schrieb:

    (mein VB ist rostig, deshalb vorher unbedingt schauen, ob das so funktioniert und ggf. auch Google verwenden, für Details)


    S.h.

    1. Google-Ergebnis wäre

    VB.NET-Quellcode

    1. ​Using client As New HttpClient()
    2. Using response As HttpResponseMessage = Await client.GetAsync(url)
    3. Using content As HttpContent = response.Content
    4. Dim myContent As String = Await content.ReadAsStringAsync()
    5. Return myContent
    6. End Using
    7. End Using
    8. End Using


    Ist aber auch ungetestet von mir.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    sunshine schrieb:

    Bitte überprüfen Sie die Response-Eigenschaften der Ausnahme, um zu bestimmen, warum die Anforderung nicht ausgeführt werden konnte.
    Überprüfen Sie die Status-Eigenschaft, um zu bestimmen, warum die Anforderung nicht ausgeführt werden konnte.
    Das ist doch mal ein deutlicher Hinweis. Was ergeben diese Details?

    sunshine schrieb:

    Schon dim httpCl = new HttpClient() bockt schon...
    Was heißt das konkret? Gibt es eine Fehlermeldung? Wenn ja, welche genau? Nutze die Visual-Studio-Vorschläge, denn sie sind meist sinnvoll, siehe Anhang.
    Bilder
    • Proposal.png

      24,82 kB, 847×234, 61 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich komme mit den beigefügten Hinweisen nicht klar, egal wie oft ich diese bei Aufruf im Detail lese. Das ist mir zu fachspezifisch.

    Bei dem Ansatz von siycah habe ich bzgl.

    Using client As New HttpClient()

    wohl in VB 2010 nicht die richtigen Imports. Das gibt es bei mir keinen Imports System.net.http. Auch habe ich noch nie mit Public async .. gearbeitet.
    Bilder
    • Fehlermeldung.png

      34,28 kB, 811×357, 64 mal angesehen

    sunshine schrieb:

    in VB 2010


    Gott oh Gott, da solltest du glaube ich schnell auf eine modernere Version hochziehen. Das ist ja schon fast 15 Jahre alt. Mittlerweile hat sich das deutlich weiterentwickelt.
    Die IDEs sind nicht mehr einzeln, sondern jetzt alle unter "Visual Studio" zusammengefasst.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.