Manne: download starten

hallo und guten tag,

ich habe mir ein perlscript gebastelt, welches ein
formularfeld daraufhin ueberprueft, ob ein gueltiges passwort eingegeben wurde.
nun soll bei korrektem passwort der download einer
datei automatisch gestartet werden.

mit folgenden zeilen geht das auch:

print "HTTP/1.0 300\n";
print "Location: $downloadfile\n\n";
print "Content-type: application/octet-stream\n";
print "Content-length: ","$filesize","\n";

nun meine fragen
1. ist dies der richtige weg? (nur weil's geht muss es
                               ja nicht stimmen)
2. laesst sich der download einer datei in einem per
   passwort (.htaccess o. aehnlich) geschuetzen
   verzeichnis ebenso starten?

gruss an alle und dank im voraus

manne

  1. hi!

    print "Content-type: application/octet-stream\n";
    print "Content-length: ","$filesize","\n";

    Diese beiden Zeilen werden eigentlich gar nicht mehr als HTTP-Header erkannt, da nach dem Location-Header schon eine Leerzeile folgt. Du solltest sie also auch weglassen können.

    1. ist dies der richtige weg? (nur weil's geht muss es
                                     ja nicht stimmen)

    Hm, es soll funktionieren und es funktioniert auch. Wo liegt denn da das Problem?

    1. laesst sich der download einer datei in einem per
         passwort (.htaccess o. aehnlich) geschuetzen
         verzeichnis ebenso starten?

    Ja, aber natürlich muss dann ein Passwort eingegeben werden. Der Location-Header wird ja nicht serverseitig ausgewertet, sondern auf der Clientseite.

    bye, Frank!

    1. hi!

      auch hi! und danke

      1. ist dies der richtige weg? (nur weil's geht muss es
                                       ja nicht stimmen)

      Hm, es soll funktionieren und es funktioniert auch.

      Wo liegt denn da das Problem?

      hab einfach rumprobiert und mich gewundert einen weg
      gefunden zu haben

      Ja, aber natürlich muss dann ein Passwort eingegeben werden. Der Location-Header wird ja nicht serverseitig ausgewertet, sondern auf der Clientseite.

      genau dieses 2. passwort wollte ich vermeiden

      manne

  2. Hi,

    print "HTTP/1.0 300\n";
    print "Location: $downloadfile\n\n";
    print "Content-type: application/octet-stream\n";
    print "Content-length: ","$filesize","\n";

    nun meine fragen

    1. ist dies der richtige weg? (nur weil's geht muss es
                                     ja nicht stimmen)

    wie Frank schon sagt bringt der Header so nichts. Er ist aber auch nicht nötig, weil der Server alles nötige erledigt. Ein "Location:" bewirkt das gleiche, als würde der Benutzer auf einen Link klicken - Du kannst also alles außer jener Zeile weglassen.

    1. laesst sich der download einer datei in einem per
         passwort (.htaccess o. aehnlich) geschuetzen
         verzeichnis ebenso starten?

    Wie gesagt gibt es keinen Unterschied zwischen "Location:" und einem Link. Wenn das Verzeichnis passwortgeschützt ist muß der Benutzer also ein Passwort eingeben. Du kannst aber folgenden Weg gehen:

    print "HTTP/1.0 300\n";
    print "Content-type: application/octet-stream\n";
    print "Content-length: $filesize\n";
    print "Content-Disposition: filename=$name.zip\n\n"; # Dateiname ist sonst script.pl oder so
    open(READ,$datei); # die Datei kann _irgendwo_ auf dem Server liegen, muß also nicht mal über das Internet verfügbar sein!
    binmode READ;
    binmode STDOUT; # beides ist auf Unix-Servern unnötig, sollte aber dabei sein
    while ($line=<READ>) { print $line; }
    close(READ);

    Cheatah

    1. danke erstmal

      print "HTTP/1.0 300\n";
      print "Content-type: application/octet-stream\n";
      print "Content-length: $filesize\n";
      print "Content-Disposition: filename=$name.zip\n\n";

      browser meldet dass die datei nicht verfuegbar waere
      wo gibt's uebrigens ne doku ueber diese "Content-" geschichten ?

      while ($line=<READ>) { print $line; }

      zip-datei wird im browserfenster angezeigt

      manne

      1. Hi,

        print "HTTP/1.0 300\n";
        print "Content-type: application/octet-stream\n";
        print "Content-length: $filesize\n";
        print "Content-Disposition: filename=$name.zip\n\n";

        browser meldet dass die datei nicht verfuegbar waere

        hm... ich benutze das bei mir ohne die erste Zeile. Nimm die einfach mal weg und schau nach, ob's klappt.

        wo gibt's uebrigens ne doku ueber diese "Content-" geschichten ?

        Keine Ahnung, ich habe mir das auch mühsam zusammengeklaubt :-)

        while ($line=<READ>) { print $line; }

        zip-datei wird im browserfenster angezeigt

        Sollte mit obiger Korrektur verhindert werden. Wenn nicht, ändere den Content-type in application/zip.

        Cheatah

      2. hi!

        wo gibt's uebrigens ne doku ueber diese "Content-" geschichten ?

        RFC 1945 beschreibt das HTTP/1.0-Protokoll und damit auch die passenden Header: http://www.faqs.org/rfcs/rfc1945.html, Abschnitt 10

        bye, Frank!