_DownloadWithProgress

  • Hallo Oscar,

    deine UDF ist echt super. Könnte man bei dir auch ein Array von Links und Speicherorten übergeben?
    Mein Problem ist, dass ich mehrere Dateien habe, die unterschiedlich platziert werden müssten.
    Ich möchte gerne deine UDF für eine Update-Funktion in allen meinen Programmen nutzen.
    Da es mehrere Dateien sein können, müsste ich deine UDF öfters starten und hätte keinen "Gesamtbalken"...

    Vielen Dank, Anna

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Ein großartiges Tool und so schön "mundfertig"! :thumbup:

    Dummerweise erhalte ich häufig den Fehler Nr. 6 - "Dateigröße konnte nicht ermittelt werden".

    Das passiert u. a. bei Bildern von Wikipedia, aber leider (und das ist übel) auch bei Dateien von meinem eigenen Webauftritt, die man dort per Browser, ohne Login etc., problemlos direkt herunterladen kann.

    Es passiert sogar bei harmlosen Bildern, die von meinen (im Editor handgestrickten, ultraschlichten) HTML-Seiten ohne jedweden Kunstgriff eingebunden werden.
    Es hakt auch bei ganz unkomplizierten Links, ohne Bindestriche, Underlines, Sonderzeichen etc.

    Muss der Server irgendwie speziell konfiguriert sein, damit die Dateigröße ermittelt werden kann?

    In der Hilfe zu InetGetSize steht:

    "Not all servers will correctly give the file size, especially when using a proxy server."

    Natürlich bin ich mir keiner Schuld bewusst, meinen Server irgendwie schräg konfiguriert zu haben. :/
    Ich könnte auf die ProgressBar verzichten, wenn die Dateigröße nicht ermittelt werden kann, hauptsache die Datei wird herunter geladen. Darum probierte ich mal, unter Verzicht auf Oskars Tool, nacktes IneGet() zum Downloaden. Ging bei den "problembehafteten" Dateien aber auch nicht ...

    Warum geht es per Browser, jedoch nicht per InetGet? Und was kann man da tun?

    Ich code, also bin ich!

  • Danke für den Hinweis, autoiter, aber das hilft nicht.

    Ich habe auch keine großen Dateien beim Wickel, sondern es scheitert schon an kleinen Bildern (paar kB).

    Davon abgesehen, klappt ja auch schon das simple Ermitteln der Dateigröße nicht, mittels InetGetSize.

    Diese URL funzt:

    Global $sURL = 'http://SunSITE.Informatik.RWTH-Aachen.DE/ftp/pub/packages/SELFHTML/selfhtml812.zip'

    Und diese funzt nicht:

    Global $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'

    Der Code des geschätzten Bitnuggers, aus dem von Dir erwähnten Thread, ändert daran nichts.

    Es nützt auch nichts, InetRead anstelle von InetGet zu verwenden (wäre ja auch sonderbar).

    Bis jetzt habe ich den Eindruck, dass InetGet immer dann scheitert, wenn InetGetSize ebenfalls scheitert, also die Dateigröße nicht ermitteln kann.

    Die Datei existiert jedenfalls auf dem Server und ist per Browser problemlos downloadbar, wenn man die URL ins Adressfeld kopiert.

    Über die Konsole kommen nur die Error-Flags der jeweiligen Befehle (die die Hilfedatei leider nicht näher aufschlüsselt); am Code selbst wird nichts bemängelt.

    Ich code, also bin ich!

  • Hmm, lässt sich das Problem auf http bzw. https einschränken?

    Wir hatten hier schon Diskussionen darüber. Ich glaube da hatten Leute mit Win 7 Probleme. Ich habe den Thread gerade aber nicht gefunden und bin mir auch nicht sicher..

    Vielleicht machst du einen eigenen Thread auf? ;)

    Grüße autoiter

    • Offizieller Beitrag

    Und diese funzt nicht:


    Global $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'

    Das funktioniert bei mir einwandfrei:

    C
    $sUrl = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'
    $sFile = InetGet($sUrl, @ScriptDir & '\test.jpg')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sFile = ' & $sFile & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    Hast Du eventuell Probleme mit Deiner Internetverbindung?

  • Und diese funzt nicht:


    Global $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'

    Hast Du eventuell Probleme mit Deiner Internetverbindung?

    Wenn das der Fall sein sollte, dann hilft die Funktion _InternetSetOptionsW... bewirkt aber auch keine Wunder!

    Bei mir funktioniert es jedenfalls (auch ohne _InternetSetOptionsW) mit beiden Links!

  • Hmm, lässt sich das Problem auf http bzw. https einschränken?

    Wir hatten hier schon Diskussionen darüber. Ich glaube da hatten Leute mit Win 7 Probleme. Ich habe den Thread gerade aber nicht gefunden und bin mir auch nicht sicher..

    Vielleicht machst du einen eigenen Thread auf? ;)

    Nein, mit HTTPS hat es nichts zu tun.

    Der Code aus Oscars Startposting enthält ja Beispiellinks, von denen einer vom Typ HTTPS ist. Und der funzt.


    Hast Du eventuell Probleme mit Deiner Internetverbindung?

    Welcher Art könnten diese Probleme sein?

    Ich bin quasi den ganzen Tag online, hangel mich durch diverse Foren, schlage irgendwas auf Wiki nach, lese Nachrichtenportale ... mir ist von Problemen mit der Internetverbindung nichts bekannt.

    Ich habe eben Deinen neuen Code probiert, Oscar.

    Ausgabe in der Console:

    >"D:\Programme\AutoIt3\SciTE-AutoIt3Installer\..\autoit3.exe" /ErrorStdOut "H:\Notebook-Reparatur\Mainboardverwaltung\Testroutinen\Download with Progress\Oskars neuer Code.au3"

    @@ Debug(3) : $sFile = 0

    >Error code: 13

    >Exit code: 0 Time: 0.4261


    Und mit Bitnuggers Code erhalte ich folgende Ausgabe in der Console:

    >"D:\Programme\AutoIt3\SciTE-AutoIt3Installer\..\autoit3.exe" /ErrorStdOut "H:\Notebook-Reparatur\Mainboardverwaltung\Testroutinen\Download with Progress\Bitnuggers Code.au3"

    > ohne_InternetSetOptionsW()

    + ohne_selfhtml812.zip wurde erfolgreich gespeichert

    > ohne_InternetSetOptionsW()

    ! Fehler beim Herunterladen von ohne_Lichteffekte_500t.jpg

    + CONNECT_TIMEOUT wurde geändert!

    + RECEIVE_TIMEOUT wurde geändert!

    > mit_InternetSetOptionsW()

    + mit_selfhtml812.zip wurde erfolgreich gespeichert

    > mit_InternetSetOptionsW()

    ! Fehler beim Herunterladen von mit_Lichteffekte_500t.jpg

    >Exit code: 0 Time: 23.72


    Kann es eventuell an Windows XP liegen?

    Vielleicht machst du einen eigenen Thread auf? ;)

    Es liegt mir natürlich fern, Oscars Thread zu kapern, aber die Probleme begannen beim Testen des Codes aus seinem Startposting; ungeachtet dessen, dass sich später zeigte, dass sogar auf bloßes InetGet() reduzierter Code die gleichen Probleme macht.

    Wenn InetGet nicht unter allen Umständen funktioniert, dann betrifft das auch Oscars Code. Von daher halte ich es nicht für sinnvoll, einen eigenen Thread zu eröffnen.

    Oscars Code finde ich große Klasse, eben weil der alle möglichen Fehler abfängt.

    Bei mir tritt ein bisher nicht berücksichtigter Fehler auf, der zwar sauber abgefangen wird, aber halt dazu führt, dass die gewünschte Datei nicht herunter geladen wird.

    Ich code, also bin ich!

  • Vermutlich trifft das den Nagel auf den Kopf, Bitnugger.

    Und wie man auf diesen beiden Seiten nachlesen kann:

    https://www.zdnet.de/88314583/micro…uer-windows-xp/

    https://support.microsoft.com/de-de/help/401…-1-2-in-windows

    ... ist es doch recht frickelig das Update zum Laufen zu bringen. :(

    Das ist aber schade, denn ich hatte die Idee im Kopf, meinem Testgerät ein billiges, minimalistisches, embedded PC-Board zu spendieren, mit einem ebenfalls minimalistischen XP, auf dem dann meine Software läuft.

    Ich hatte mal ein Projekt, wo ich ein Android-Tablet verbaute, mit Anschluss an einen Arduino. Die Arduino Software hatte ich selbst geschrieben, aber die Software für Android musste ich schreiben lassen. Das war ein ewiges Ärgernis, weil ich für jede benötigte Änderung von dem Android-Programmierer abhängig war und ich keine Zeit & Nerven hatte, mich da selbst einzuarbeiten (ich mag Android nicht).

    Aus meiner Sicht wäre es daher wünschenswert, ein abgespecktes Windows-System zu verwenden, auf dem AutoIt läuft. Aber wenn ich mehrere dieser Testgeräte fertige, dann soll die Installation auch nicht ausarten.

    OK, das war ein schwaches Argument; man könnte natürlich ein vorgefertigtes Image einspielen.

    Als Alternative fällt mir noch der IMHO leicht dreckige Workarround ein, dass AutoIt den installierten Webbrowser "fernsteuert". Denn wie man liest, bringen z. B. Firefox und Chrome von sich aus Unterstützung von TLS 1.2 mit. Offenbar umgehen sie das Betriebssystem irgendwie.

    Keine Ahnung, ob das auch auf den Internet Explorer zutrifft, aber meines Wissens tut gerade der IE so einige Dinge am Betriebssystem vorbei.

    Gut, ich habe jetzt einige Dinge zu testen und bedanke mich für die diversen Antworten!

    Ich code, also bin ich!

  • Wenn InetGet nicht unter allen Umständen funktioniert, dann betrifft das auch Oscars Code. Von daher halte ich es nicht für sinnvoll, einen eigenen Thread zu eröffnen.

    Ich schon, da das Problem nicht Oscars Skript betrifft und somit sein Thread unötig zumüllt aufbläht.