Robert Spillner: Mozilla scheidet Pfad bei Datei-Formularfeldern ab

Ich benutze Mozilla 1.3 unter Linux und versuche, über ein
Formularfeld mit <input type=file> einen Dateiennamen an ein Skript zu übergeben:

<form method=post>
<input type=file name=filefield enctype="multipart/form-data"/>
<input type=submit name=submitfield>
</from>

Gebe ich z.B. /home/robert/test.jpg ein, so übergibt Mozilla nur

POST / HTTP/1.1

[...blabla...]

Content-Type: application/x-www-form-urlencoded
Content-Length: 30

filefield=test.jpg&submitfield=

an den Server, schneidet also den kompletten Pfad ab.
Der Konqueror macht das z.B. nicht, der übergibt den vollen
Pfad; andere Browser hab ich nicht getestet.

Kennt jemand dasselbe Problem, soll das so sein, ist das aus
Sicherheitsgründen so und wie kann ich trotzdem dem Pfad bei
Mozilla mit übergeben, ohne ein Textfeld zu benutzen (denn dabei
hätte man dann nicht den bequemen Dateiauswahl-Dialog).

Danke, viele Grüße,

Robert

  1. Hiho,

    ich kann dir bei deinem Problem leider erst mal nicht helfen, was mir aber aufgefallen ist, das dein Code ziemlich Abenteuerlich aussieht. Erst mal gehören um die ganzen Werte Anführungszeichen: <input type="file">, <form method="post"> usw. Dann z.b. bei enctype="multipart/form-data"/, was macht dort der slash am Ende? Räum am besten erst mal den Code auf, dann jag ihn mal durch den valiator 1. Wenn dann alles stimmt, dann können wir uns mal an die Fehlersuche machen. Ich hab nämlich keine Lust mich da länger damit zu beschäftigen und dann fest zu stellen, das es nur an unsauberem HTML liegt.

    Grüsse

    Marc

    1. Hi,

      sorry, der angegebene Code war von mir schnell per Hand in die
      Nachricht eingehackt und ist damit nicht der, der das Problem
      auslöst.
      Der richtige Code IST HTML-konform, enthält die von dir bemängelten
      Stellen nicht und wurde vom Perl CGI-Modul generiert. Jetzt per Copy-
      and-Paste (unter Auslassung der restlichen Formularfelder):

      <form method="post" action="schrank.cgi" enctype="multipart/form-data">
      <input type="file" name="Filename"  size="40" />
      </form>

      Der abschließende "/" (mit vorangesetzem Leerzeichen) ist meines Wissens
      nach bei leeren Elementen nach SGML-Standard zu setzen.
      Allerdings ändert das alles nichts an meinem Problem. Die Frage wurde
      ja schon beantwortet: ich brauche den absoluten Pfad, um mit dem Skript
      auf die Datei zuzugreifen (dieses soll auf die selben NFS-Laufwerke
      zugreifen, wie der Server), es soll keine Datei hochgeladen werden.
      Anscheinend brauche ich dafür ein Textfeld.

      Grüße, Robert

      1. hi,

        ich brauche den absoluten Pfad, um mit dem Skript
        auf die Datei zuzugreifen (dieses soll auf die selben NFS-Laufwerke
        zugreifen, wie der Server), es soll keine Datei hochgeladen werden.
        Anscheinend brauche ich dafür ein Textfeld.

        die datei _wird_ aber bereits hochgeladen, wenn du ein formular mit input type=file abschickst - das würde dann auch noch umsonst geschehen ...

        gruss,
        wahsaga

  2. hi,

    Kennt jemand dasselbe Problem, soll das so sein, ist das aus
    Sicherheitsgründen so und wie kann ich trotzdem dem Pfad bei
    Mozilla mit übergeben, ohne ein Textfeld zu benutzen (denn dabei
    hätte man dann nicht den bequemen Dateiauswahl-Dialog).

    <input type="file"> ist ausschliesslich dazu gedacht, eine datei über HTTP auf den server hochzuladen.
    der originale pfad ist dabei eine information, die reichlich wertlos ist, also warum sollte der client sie übermitteln müssen?

    wenn du den pfad für etwas ganz anderes haben willst (um ihn auf der nächsten seite mit dem file://-protokoll zu verwenden o.ä.), dann hast du das falsche mittel gewählt.

    gruss,
    wahsaga