Armin: Werzuweisung eines Input=File

Hallo zusammen,

weiß jemand zufällig wie man einer File-Input-Box
eine neue Datei dynamisch zuweist?

Bei einer normalen Input-Box geht das ja so..

<input size='50' Value='Der Alte Text' name='XXX'>

XXX.value="Ein neuer Text"

<input type='File' name='XXX'>
Wie weise ich diesem Input-Feld eine Datei dynamisch zu??

Der Gag bei der Sache ist das ich mit der Value-Eigenschaft auf den Dateinamen zugreifen kann..aber keine anderen dynamisch reinschreiben kann...

  1. Hi Armin,

    Der Gag bei der Sache ist das ich mit der Value-Eigenschaft auf den Dateinamen zugreifen kann..aber keine anderen dynamisch reinschreiben kann...

    ich habs zwar noch nie ausprobiert, denke aber das geht so nicht aus folgendem Grund: Nachdem du auf submit gedrückt hast wird mein JavaScript aktiv und ändert das file auf c:\windows\regedit.exe und schickt das ganze anschliessend los.

    gruss

    Curt

    1. Hallo,

      Nachdem das File-Input Feld auf der Seite erscheint..
      möchte einen Dateinamen eintragen. Ich erteile keine Submit-Auftrag..Alles was ich will ist einen Dateinamen eintragen..Man könnte meinen das sei eigentlich nicht schwer..aber wie? Gibt es vielleicht eine andere Eigenschaft der man den Dateinamen zuweisen kann..wie z.B. XXX.filename='C:\Verzeichnis\XY.EXE' ?

      Ich frage mich halt noch immer wieso ich mit
      XXX.Value den Dateinamen auslesen kann umgekehrt
      aber nicht mit XXX.Value="Dateiname" etwas eintragen kann..

      Wer kann mir helfen...??

      1. Hallo Curt,

        Nachdem das File-Input Feld auf der Seite erscheint..
        möchte einen Dateinamen eintragen. Ich erteile keine Submit-Auftrag..Alles was ich will ist einen Dateinamen eintragen..Man könnte meinen das sei eigentlich nicht schwer..aber wie? Gibt es vielleicht eine andere Eigenschaft der man den Dateinamen zuweisen kann..wie z.B. XXX.filename='C:\Verzeichnis\XY.EXE' ?

        Ich frage mich halt noch immer wieso ich mit
        XXX.Value den Dateinamen auslesen kann umgekehrt
        aber nicht mit XXX.Value="Dateiname" etwas eintragen kann..

        IMHO ist das im entsprechenden RFC (1867 Formbased Fileupload) aus
        Sicherheitstechnischen Gründen so eingetragen. Ist ja auch logisch.
        Wenn das gehen würde, könntest du jede beliebige Datei der Clients
        übertragen und das willst du doch wohl nicht, oder !?
        Siehe: http://community.roxen.com/developers/idocs/rfc/rfc1867.html
        Absatz 8: Security Considerations

        HTH, Stefan

      2. Hi Armin

        Nachdem das File-Input Feld auf der Seite erscheint..
        möchte einen Dateinamen eintragen. Ich erteile keine Submit-Auftrag..Alles was ich will ist einen Dateinamen eintragen..Man könnte meinen das sei eigentlich nicht schwer..aber wie? Gibt es vielleicht eine andere Eigenschaft der man den Dateinamen zuweisen kann..wie z.B. XXX.filename='C:\Verzeichnis\XY.EXE' ?

        Ob du keinen erteilen willst spielt doch keine Rolle, grundsätzlich könntest du aber und dann könnte man beliebige files erhalten solange man nur den pfad kennt.

        Ich frage mich halt noch immer wieso ich mit
        XXX.Value den Dateinamen auslesen kann umgekehrt
        aber nicht mit XXX.Value="Dateiname" etwas eintragen kann..

        Wer kann mir helfen...??

        Ich habs nochmal nachgeschlagen um sicher zu sein.

        XXX.value ist readonly, also keine Chance.

        gruss

        Curt

      3. Hallo Armin,

        Ich frage mich halt noch immer wieso ich mit
        XXX.Value den Dateinamen auslesen kann umgekehrt
        aber nicht mit XXX.Value="Dateiname" etwas eintragen kann..

        Warum du nichts schreiben kann, haben wir ja nun geklärt. Wrum kann man es nun aber auslesen?
        Weil es egal ist ob man den Filename mit JavaScript oder einem CGI-Script ausliest. Und da es per CGI grundsätzlich möglich sein muss, um bspw. einen Dateiupload zu machen, warum sollte es mit JavaScript dann nicht möglich sein. Stell dir vor, User X bietet dir ein File zu Upload per HTTP an. Auf seinem Rechner sieht es aber aus wie bei mir auf dem Schreibtisch :-). Somit heißt seine Datei dann "Müßli riegel.k0xx". Ich würde mal diagnostizieren, für den Server ist das schwer verdaulich. Sowas kannst Du mit JavaScript abfangen, und den User X bitten, die Datei umzubenennen.

        Es gibt natürlich noch andere Möglichkeiten.

        Bye Ed X

  2. Hi,

    Also der Value-Wert ist ganz schön hartnäckig..

    na gut lassen wir das beiseite..könnt mir jm. sagen
    wie man sowas ähnliches wie den Browse-Button für ein normales Texteingabefeld erstellt?

    Warum ich unbedingt den Value-Wert bei einem
    "file"-Input-Feld  ändern wollte war nämlich folgender:

    ich möchte eigentlich nur den Namen der Datei...sonst
    aber nichts weiter mit ihr anstellen..Und dem Nutzer die Eingabe des Dateinamens komfortable über einen
    Browse-Button ermöglichen...klappt auch prima mit
    dem type=file aber leider will der User später wieder
    auf diesen Dateinamen zurückgreifen um ihn evtl. leicht
    oder komplett abzuändern...dafür will ich den Namen dann wieder in dieses Feld eintragen..eben in den value-Wert..

    gibt es sonst noch irgendeine-Möglichkeit einen Browse-Button zu erzeugen und diesen irgendwie mit einem "normalen" Eingabefeld zu verknüpfen?

    Danke schon mal alleine für's lesen..

    1. Hi Armin,

      na gut lassen wir das beiseite..könnt mir jm. sagen
      wie man sowas ähnliches wie den Browse-Button für ein normales Texteingabefeld erstellt?

      nein, das sollte IMHO auch nicht möglich sein

      Warum ich unbedingt den Value-Wert bei einem
      "file"-Input-Feld  ändern wollte war nämlich folgender:

      ich möchte eigentlich nur den Namen der Datei...sonst
      aber nichts weiter mit ihr anstellen..

      und dafür Type = file?, mit Äpfeln nach Birnen schmeißen, oder wie...
      was machst Du denn mit dem mitgesendeten File????? Mal eben den Traffic auf deiner Webseite in die Höhe treiben?

      auf diesen Dateinamen zurückgreifen um ihn evtl. leicht
      oder komplett abzuändern...dafür will ich den Namen dann wieder in dieses Feld eintragen..eben in den value-Wert..

      gibt es sonst noch irgendeine-Möglichkeit einen Browse-Button zu erzeugen und diesen irgendwie mit einem "normalen" Eingabefeld zu verknüpfen?

      Zur Verständnisklärung: Du willst nur den Namen der Datei haben, und willst dem Nutzer die eingabe ersparen und desahlb einen Browse-Button anbieten. Das ist ein Fall von mitgedacht und deshalb löblich.

      Ich würde das mit 2 Formularen (die unterschiedliche Namen haben) machen. Dann würde ich den Wert des einen Formulars(welches nur type= file enthält) einlesen und in das andere Formular übergeben.

      Hier etwas codezum Verständnis:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 //EN">

      <html>
      <head>
       <title>Untitled</title>
      <script language="JavaScript" type="text/javascript">
       function uebertragung()
        {
        document.formularZumSenden.dateiname.value = document.nurBrowsen.dateiname.value;
        }
      </script>
      </head>

      <body>
      <form id="nurBrowsen" name="nurBrowsen" action="egal">
      <input type="file" name="dateiname">
      </form><br>
      <a href="javascript:uebertragung()">setIt</a><br>
      <form id="formularZumSenden" name="formularZumSenden" action="hiermitaction">
      <input type="text" name="dateiname" size="60" onfocus="uebertragung()">
      </form>
      </body>
      </html>

      Das onfocus ist dort,weil onchange in type=file nicht funktioniert :-(.

      Ich weiß, damit hast Du zwei Felder, aber was besseres fällt mir nicht ein.

      Bye Ed X

      1. Moin Ed,

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 //EN">

        <html>
        <head>
        <title>Untitled</title>
        <script language="JavaScript" type="text/javascript">
        function uebertragung()
          {
          document.formularZumSenden.dateiname.value = document.nurBrowsen.dateiname.value;
          }
        </script>
        </head>

        <body>
        <form id="nurBrowsen" name="nurBrowsen" action="egal">
        <input type="file" name="dateiname">
        </form><br>
        <a href="javascript:uebertragung()">setIt</a><br>
        <form id="formularZumSenden" name="formularZumSenden" action="hiermitaction">
        <input type="text" name="dateiname" size="60" onfocus="uebertragung()">
        </form>
        </body>
        </html>

        Das onfocus ist dort,weil onchange in type=file nicht funktioniert :-(.

        Ich weiß, damit hast Du zwei Felder, aber was besseres fällt mir nicht ein.

        ... guter Lösungsansatz soweit; um nicht zwei Felder zu haben, gäbe es doch noch die Möglichkeit, im zweiten Formular

        <input type="hidden" name="dateiname" size="60">

        zu verwenden. Dann kann man natürlich onfocus nicht mehr verwenden, da man unsichtbare Felder nun mal nicht aktivieren kann... Dafür müsste also noch ein Ersatz gefunden werden.

        Mit passendem Layout sollte es sich auch machen lassen, das ganze _optisch_ wie ein Formular aussehen zu lassen.

        Glück auf
        Dirk

  3. Hallo,

    weiß jemand zufällig wie man einer File-Input-Box
    eine neue Datei dynamisch zuweist?

    Ich hab da mal etwas bei Netscape gelesen.
    http://developer.netscape.com:80/docs/manuals/communicator/jssec/index.htm
    Unter 'Using Expanded Privileges' findest Du dort die zur Verfügung stehenden Möglichkeiten.
    mit dem Privileg 'UniversalFileRead' kannst Du dann auch file-uploads setzen.

    Aber...

    • AFAIK gibt's beim Setzen der Privilegien _immer_ eine Warnung an den Benutzer. Ist ja auch gut so.
    • Ich fürchte, das funktioniert nur mit Netscape. Ich habe nirgends Hinweise gefunden, daß anere Javascript-fähige Browser das auch können. (Allerdings habe ich auch nicht intensiv danach gesucht)

    Grüße
      Klaus