tilera: download mit html

wie kann ich mit nodejs eine datei runterladen, wo im url es egal ist, ob es http oder https ist und wo kein dataeiname am ende steht?

  1. Liebe(r) tilera,

    wo im url es egal ist, ob es http oder https ist

    da notierst Du einen sogenannten protokollrelativen Pfad.

    und wo kein dataeiname am ende steht?

    Wie sollte das aussehen? Hättest Du da ein Beispiel?

    Liebe Grüße,

    Felix Riesterer.

    1. soetwas: https://minecraft.curseforge.com/projects/extra-utilities/files/2264383/download

      1. Liebe(r) tilera,

        soetwas: https://minecraft.curseforge.com/projects/extra-utilities/files/2264383/download

        eine solche Anfrage muss ein serverseitiges Script beantworten. Da genügen "reine HTML-Mittel" nicht. Der URI hat diesen Pfad:

        /projects/extra-utilities/files/2264383/download
        

        Ein Download könnte gelingen, wenn es tatsächlich eine Datei namens "download" gibt (also ohne Dateiendung), die in einem Verzeichnis namens "2264383" abgelegt ist, welches wiederum Unterverzeichnis von ... Du verstehst?

        Wenn das alles zutrifft, dann würde der Browser tatsächlich die Datei "dowload" herunterladen. Ist es keine vom Browser direkt darstellbare Datei, so wird er einen "speichern unter"-Dialog anbieten, wobei der Dateiname "download" schon voreingetragen sein wird. Was Du aber sicherlich stattdessen haben möchtest, ist ein erzwungener Download-Dialog, egal um welchen Dateityp es sich handelt, und auch mit einem "echten" Dateinamen. Deshalb wirst Du für eine zufriedenstellende Lösung kaum um eine serverseitige Programm-Logik herum kommen, die das für Dich regelt.

        Liebe Grüße,

        Felix Riesterer.

      2. Tach!

        soetwas: https://minecraft.curseforge.com/projects/extra-utilities/files/2264383/download

        Du gibst genau diese URL an, wenn du das Downloaden möchtest, was es da gibt. Es ist dabei egal, ob du das über einen Browser machst oder über einen Webclient in irgendeiner Programmierumgebung. Es ist nicht zwingend notwendig, dass eine URL in der Form name.extension endet. Was ein Server zu einer URL ausliefert, hängt von seiner Konfiguration ab.

        In dem Fall ist es aber so, dass die URL mit einem Statuscode 307 beantwortet wird. Das heißt, du musst nach einem Location-Header Ausschau halten und eine erneute Anfrage an die dort angegebene URL stellen.

        Dummerweise wird der in diesem Fall mit einem 302 beantwortet, was ein erneuter Redirect an die im Location-Hader angegebene URL ist. Erst dort gibt es die eigentliche Datei.

        Wenn man nun selbst einen Client schreibt, nimmt man am besten eine fertige Client-Komponente, die diesen Redirects selbständig nachgeht. Wenn du näher am Protokoll arbeiten möchtest oder musst, dann musst du diese Redirects selber erkennen und entsprechen neue Requests starten.

        Dass das bei der angegebenen URL so ist wie beschrieben, haben mir die Entwicklertools vom Firefox verraten, die zeigen allen Netzwerkverkehr an. Leider hat der Chrome hierbei versagt, und nur den Download gestartet, ohne in seinen Entwicklertools dazu etwas anzuzeigen.

        dedlfix.