kaepten: Projekt pdf File-Upload

Hallo zusammen!

Ich war jetzt gerade im Archiv und habe mich über File-Upload schlau gemacht. Nun habe ich aber noch ein Paar zusätzliche Fragen:

Mein Vorhaben:
Auf meiner Site soll ein Magazin (Heft) im Format pdf veröffentlicht werden. Das Magazin erscheint monatlich. Nun ist mir die Idee gekommen, dass der Zuständige, welcher das Magazin macht, das pdf File direkt via Browser auf den Server hochladen könnte. Ich würde ein Perl-Script kreieren, welches ermöglicht, dass das aktuell upgeloadete pdf (und natürlich die älteren) in einer HTML Seite ausgewählt und angezeigt werden kann. Das Ganze sozusagen eine ziemlich automatisierte Angelegenheit.

Fragen:
1. Hat jemand ein ähnliches Vorhaben bereits realisiert? Ist es eine arg schwierige Angelegenheit, oder liegts im Rahmen des allgemein Machbaren? (Erfahrung?) Lohnt siche der (Programmier-) Aufwand überhaupt, oder ist ein "manuelles" uploaden und HTML-Seiten anpassen auch auf längere Sicht wirtschaftlicher?

2. Wenn ich mit ftp ein File uploade, muss ich immer via username und passwort einloggen. In dem Script von Brent Michalski (Wurde im Forum mehrmals gepostet) kann ich nirgends sehen, dass da ein Login gemacht werden muss. Entfällt das mit einem CGI Script?

3. In den Beispielen ist immer die Rede von Bild- oder Textdateien. Ich gehe davon aus, dass pdf Dateien genau so einfach upzuloaden sind?

4. Gibts noch weitere Perl-Scipt Archive mit freien Upload Scripts?

  1. Du stellst sehr präzise Fragen - da muß man endlich mal nicht lange herumraten, was Du eigentlich willst. Bravo - weiter so ...

    1. Hat jemand ein ähnliches Vorhaben bereits realisiert? Ist es eine arg schwierige Angelegenheit, oder liegts im Rahmen des allgemein Machbaren? (Erfahrung?) Lohnt sich der (Programmier-) Aufwand überhaupt, oder ist ein "manuelles" uploaden und HTML-Seiten anpassen auch auf längere Sicht wirtschaftlicher?

    Das Problem ist eher, ob Du auf dem Webserver überhaupt genügend Rechte hast - das könnte die CGI-Lösung zum Scheitern bringen.
    Fertige Skripts zu installieren und zum Laufen zu bringen ist machbar - aber wenn Du verhindern willst, daß *jeder* dort Dateien ablegen kann, mußt Du noch etwas zum Zugangsschutz bauen (entweder das Upload-Skript aufmotzen oder .htaccess oder whatever).
    Wieviel darfst Du selbst am Webserver und seiner Konfiguration herumschrauben? CGI darf nicht jeder, .htaccess auch nicht.

    1. Wenn ich mit ftp ein File uploade, muss ich immer via username und passwort einloggen. In dem Script von Brent Michalski (Wurde im Forum mehrmals gepostet) kann ich nirgends sehen, dass da ein Login gemacht werden muss. Entfällt das mit einem CGI Script?

    Das CGI-Skript läuft auf dem Server selbst, muß sie deshalb natürlich nicht dort einloggen.
    Das Problem ist hierbei, daß ein CGI-Skript unter einer im Webserver einstellbaren Kennung läuft. Diese könnte im Extremfall nicht berechtigt sein, Dateien in Deinem Verzeichnis anzulegen!
    Webmaster fragen und/oder eigenes Verzeichnis auf volle Rechte setzen (777), beides kann helfen.

    Die FTP-Lösung ist robust und einfach. Die Upload-Lösung hätte aber insbesondere den Vorteil, daß der Benutzer *nur* in dieses Verzeichnis Dokumente ablegen darf - mit FTP kann er nämlich eine Menge mehr tun (etwa Deine HTML-Dokumente löschen). Da kommt es darauf an, wie sehr Du den Leuten traust, denen Du Dein Passwort gibst.

    1. In den Beispielen ist immer die Rede von Bild- oder Textdateien. Ich gehe davon aus, dass pdf Dateien genau so einfach upzuloaden sind?

    Ja. Im einfachsten Falle kann man alles Mögliche hochladen (auch Programme, wenn man anschließend das X-Bit setzen und sie irgendwie ausführen darf).

    Ich selbst habe ein solches Upload-Skript, welches nur bestimmte Datei-Endungen akzeptiert (weil meine Benutzer über ein HTML-Interface auf meinem Server Jobs generieren und starten können, und ich will ihnen natürlich nicht erlauben, solche Jobs manuell zu hacken und danach wieder hochzuladen; sich einloggen und die Datei umbenennen dürfen sie *nicht*).
    Über die MULTIPART-Header bekommt man sogar die MIME-Typen der Dateien heraus, glaube ich - in meinem Fall nützt das nichts, weil ich proprietäre non-MIME-Formate benutze.

    1. Gibts noch weitere Perl-Scipt Archive mit freien Upload Scripts?

    Sorry, keine Ahnung. (Wahrscheinlich hunderte.)

      1. Gibts noch weitere Perl-Scipt Archive mit freien Upload Scripts?

      Hallo, unter der Beachtung der Rechte auf dem Server (s.w.o.)...

      hier ist ein kleines Beispiel für FUPload unter der Verwendung des CGI.PM - Moduls. Das könnte vielleicht als Grundlage dienen. Wichtig: Die Eingabe im FileInputfeld unbedingt auf Sonderzeichen u. dgl. prüfen!

      Rolf

      ---schnipp--->

      Beispiel FUP mit CGI.PM http://webreview.com/wr/pub/98/08/14/perl/index.html

      Adminvorgaben

      $verz = "/wohin/das/soll";

      use CGI qw/:standard/;
      $CGI::POST_MAX=1024 * 25;  # Max 25K
      $file_name = param('file_name');

      im Form: <input type=file name='file_name'>

      im Form <form enctype='multipart/form-data' method=post>

      $upfile = substr($file_name, rindex($file_name, "\")+1);
      $ext = substr($upfile, rindex($upfile,".")+1);

      Rapport

      print header();
      print "<p>Texteingabe: $eingabe";
      print "<p>Zum Hochladen wurde die folgende Datei ausgewählt: <br>$file_name";
      print "<p>Der Name der hochgeladenen Datei: $upfile";
      print "<p>Die Dateierweiterung ist <b>$ext</b>";

      Speichern des Upload - Files auf dem Server

      open (UPF,">$verz/$upfile");
      binmode UPF;  # ist für NT wichtig, siehe http://stein.cshl.org/WWW/software/CGI/cgi_docs.html#non_unix
      while (read($file_name, $buffer, 1024)) {
      print UPF $buffer;
      }      
      close (UPF);

      <---schnapp---<

      1. Vielen Dank für die Antworten, auch den beiden Obige...

        Ich werds versuche, kann der Versuchung nicht widerstehen ;-) Ich geh davon aus, da ich die Rechte, die ich benöte habe oder zumindest bekommen kann.

  2. Moin,

    Fragen:

    1. Hat jemand ein ähnliches Vorhaben bereits realisiert? Ist es eine arg schwierige Angelegenheit, oder liegts im Rahmen des allgemein Machbaren? (Erfahrung?) Lohnt siche der (Programmier-) Aufwand überhaupt, oder ist ein "manuelles" uploaden und HTML-Seiten anpassen auch auf längere Sicht wirtschaftlicher?

    ich hab bisher nur Ascii-Dateien geuploadet und das mit einer Routine in C. Normalerweise ist ein Fileupload aber eine Standardaufgabe, die imho in den gängigen Perl-Libraries (cgi.pm ...) schon implementiert ist. Das Komplizierte daran wird eher das mit der Zusammenwirkung Deines Magazins und dem upload-cgi.

    1. Wenn ich mit ftp ein File uploade, muss ich immer via username und passwort einloggen. In dem Script von Brent Michalski (Wurde im Forum mehrmals gepostet) kann ich nirgends sehen, dass da ein Login gemacht werden muss. Entfällt das mit einem CGI Script?

    Das cgi-skript läuft bei vielen Servern (z.B. Apache/Linux) unter einem eigenen Benutzernamen, z.B. 'nobody' und kann daher auf alle Verzeichnisse zugreifen, auf die auch 'nobody' entsprechenden Zugriff hat. Eine Passwortabfrage müßtest Du entweder selbst implementieren oder das Verzeichnis mit den cgi-Skripten z.B. via .htaccess absichern (soll ja nicht jeder an dem Magazin rumwurschteln dürfen). Genaugenommen müßtest Du Dir auch überlegen, was passieren soll, wenn z.B. aus irgendwelchen zufälligen Gründen 2 Files gleichzeitig ans cgi gesendet werden.

    1. In den Beispielen ist immer die Rede von Bild- oder Textdateien. Ich gehe davon aus, dass pdf Dateien genau so einfach upzuloaden sind?

    Im Prinzip schon, der mime-Typ müßte application/pdf sein. Im HTML-Dokument also etwa:

    <form method="post" action="<cgi-url>" enctype="multipart/form-data">
      <!--...blabla...-->
      <input type="file" accept="application/pdf" name="pdffile">
      <input type="submit" value="ab geht's">
      </form>

    Du mußt aufpassen, daß die pdf-Dateien nicht als ascii sondern als binaries versendet werden. Sie enthalten nämlich zwecks schneller Auffindbarkeit am Datei-Ende eine Tabelle mit den Byte-Offsets zu den einzelnen eingebetteten Objekten, und wenn z.B. im Ascii-Modus die Zeilenumbrüche manipuliert werden (von unix- auf dos-style...), dann passt die Tabelle hinterher nicht mehr.

    1. Gibts noch weitere Perl-Scipt Archive mit freien Upload Scripts?

    Hab momentan leider gerade keinen Überblick...

    Viele Grüße

    Andreas