sunny: enctype=multipart/form-data

Hallo Leute!

Ich hatte gestern schon mal gepostet, und zwar dass ich ein Problem mit einem Formular hatte. Wenn ich den Parameter enctype=multipart/form-data
in den Form-Tag schreibe, werden die Variablen nicht an das ASP-Skript übergeben wenn ich mit post arbeite.

Also hab ich die enctype-Angabe einfach weggelassen, nun muss ich aber in dem Formular auch noch die Möglichkeit anbieten, Dateien mitzusenden und auf den Server zu speichern. So ein Upload ist aber nur möglich, wenn multipart/form-data angegeben wird.

Nun steh ich also vor einem Problem! Woran kanns den liegen, dass die Daten per post nicht übertragen werden? Ich versteh das überhaupt nicht, was hat die enctype-Angabe mit der Methode des Versendens eigentlich genau zu tun?

Ich könnte jetzt natürlich einfach 2 Formulare anbieten, eines extra nur für den Upload. Das möchte ich allerdings nicht machen. Es muss doch eine Möglichkeit geben, beides über ein einziges Formular zu lösen!?

Grüße,
sunny

  1. Hallo Leute!

    Hallo,
     ist ganz einfach.

    <img src="/images/04.gif" width=428 height=119 border=0 alt="Schau mal in SELFHTML nach, um eine Antwort auf deine Frage zu finden!">

    Grüße,
    sunny

    Christian

    1. Hi!

      Da bin ich schon ganz heftig dabei seit gestern!
      Ich hab auch zum Beispiel folgendes gefunden:
      <form method="POST" action="empfang.asp" enctype="multipart/form-data" target="_new">
      Ist ein Beispiel aus Selfhtml http://aktuell.de.selfhtml.org/artikel/phpasp/asp-upload/index.htm

      Das funktioniert bei mir aber auch nicht! Und ich versteh warum sich plötzlich enctype und method in die Quere kommen, das Problem hatte ich vorher noch nie!?

      Lg,
      sunny

      1. Hallo,

        versuch mal ein Beispielscript zu finden, bei mir (PHP) gehts immer.

        MfG Christian

        1. Hallo,

          Hi,

          versuch mal ein Beispielscript zu finden, bei mir (PHP) gehts immer.

          Bei mir funktioniert hier leider überhaupt kein Script, nichtmal folgendes haut hin:

          Formular:
          <form name="form1" method="post" action="test.asp" enctype=multipart/form-data>
            <input type="text" name="text">
            <input type="submit" name="Abschicken" value="Abschicken">
          </form>

          test.asp:
          <%
          option explicit
          dim text

          text=request.form("text")
          response.write text
          %>

          Folgendes funktioniert aber im Gegensatz dazu:

          Formular:
          <form name="form1" method="get" action="test.asp" enctype=multipart/form-data>
            <input type="text" name="text">
            <input type="submit" name="Abschicken" value="Abschicken">
          </form>

          test.asp:
          <%
          option explicit
          dim text

          text=request.querystring("text")
          response.write text
          %>

          Kann es vielleicht an meinem IIS liegen (Version 5.1)? Oder woran sonst?

          Lg,
          sunny

          1. Kann es vielleicht an meinem IIS liegen (Version 5.1)? Oder woran sonst?

            Diese Vermutung liegt nahe.

            MfG

  2. Moin!

    Nun steh ich also vor einem Problem! Woran kanns den liegen, dass die Daten per post nicht übertragen werden? Ich versteh das überhaupt nicht, was hat die enctype-Angabe mit der Methode des Versendens eigentlich genau zu tun?

    Ich kann dir bestätigen, daß es "eigentlich" funktionieren müßte. Meine Erlebnisse mit PHP belegen jedenfalls, daß der Encoding-Typ auf das Formularsenden vom Ergebnis her keine Einflüsse hat.

    Allerdings ist natürlich doch ein Unterschied zwischen den beiden Typen! Denn sonst müßte man ihn nicht zwingend angeben, wenn man Dateien uploaden will.

    Und da ich gerüchteweise gehört habe, daß ASP in der Standardversion keine Dateiuploads versteht, könnte ich mir vorstellen, daß ASP dann ganz simpel mit "multipart/form-data" generell Probleme hat.

    - Sven Rautenberg

    1. Moin!

      Hi!

      Und da ich gerüchteweise gehört habe, daß ASP in der Standardversion keine Dateiuploads versteht, könnte ich mir vorstellen, daß ASP dann ganz simpel mit "multipart/form-data" generell Probleme hat.

      Der Dateiuplaod wird dann auch nicht direkt mit ASP selber ausgeführt, sondern über eine Upload-Komponente. Aber soweit bin ich ja noch gar nicht. Dass es mit method="get" und enctype="multipart/form-data" funktioniert spricht doch eigentlich dagegen, dass es generell Probleme mit "multipart/form-data" gibt, oder? Zumindest hatte ich bisher damit keine Probleme.

      Lg,
      sunny

      1. Yo!

        Der Dateiuplaod wird dann auch nicht direkt mit ASP selber ausgeführt, sondern über eine Upload-Komponente. Aber soweit bin ich ja noch gar nicht. Dass es mit method="get" und enctype="multipart/form-data" funktioniert spricht doch eigentlich dagegen, dass es generell Probleme mit "multipart/form-data" gibt, oder? Zumindest hatte ich bisher damit keine Probleme.

        <bremskreisch!>

        Moment! Method=_POST_ und enctype="multipart/form-data" muß es heißen, sonst geht zumindest das mit multipart und Dateiupload nicht. Wahrscheinlich ignoriert der Browser dann "multipart" und macht einen stinknormalen GET-Request draus - der von ASP natürlich verstanden wird.

        Vermutung: ASP kann kein multipart/form-data. Dazu muß man gesonderte Komponenten einsetzen. Ich hab kurz den Feature-Artikel zum ASP-Upload überflogen und denke, daß ASP doof ist (nicht nur, aber ganz explizit auch an diesem Punkt).

        Nimm PHP. Deren Programmierer haben die Sache bis zum Schluß durchdacht, und nicht mittendrin (d.h. bei den interessanten Sachen, dir dir gerade Probleme machen) aufgehört.

        - Sven Rautenberg

        1. Hi!

          <bremskreisch!>

          Moment! Method=_POST_ und enctype="multipart/form-data" muß es heißen, sonst geht zumindest das mit multipart und Dateiupload nicht. Wahrscheinlich ignoriert der Browser dann "multipart" und macht einen stinknormalen GET-Request draus - der von ASP natürlich verstanden wird.

          Darum ja auch meine Frage - ich _muss_ irgendwie post & multipart gemeinsam verwenden!

          Vermutung: ASP kann kein multipart/form-data.

          Ich hatte schonmal ein funktionierendes Script (kleines CMS in dem auch Bilder upgeloaded (blödes Wort) werden können), da hab ich das soweit ich mich erinnern kann auch so gelöst, mit post und multipart, und hat es funktioniert!?

          Nimm PHP. Deren Programmierer haben die Sache bis zum Schluß durchdacht, und nicht mittendrin (d.h. bei den interessanten Sachen, dir dir gerade Probleme machen) aufgehört.

          Sorry, aber ich kann kein PHP. Außerdem muss ich das Ganze mit ASP lösen (ist vorgegeben). Aber ich hab jetzt dann auch bald keine Idee mehr wie ich die Lösung finden sollte :(

          sunny

  3. Hallo Christian,

    versuch das mal:

    HTML 4.0:
    <form method='POST' action='upload.asp'>
    <table frame=box rules=none border=0 cellpadding=2 cellspacing=0 align='center'>
    <tr><td>Hochladen: <td><input type='file' name='file'>
    <tr><td><td><input type='submit' value='UPLOAD!' name='upload'>
    </table>

    XHTML:
    <form method="POST" action="upload.asp" target="_blank" enctype="multipart/form-data">
    <p>Hochladen:<br/>
    <input type=file name=file size=30></input></P>
    <p><button name="submit" type="submit">
    Upload
    </button></P>
    </form>

    ansonsten können wir nur helfen, wenn da der Abfrage-Code des ASP-Scripts sowie das Formular selbst hier steht..

    Wichtig sind auch Meta-Definitionen, der Zeichensatz und doctype-Definition, sowie Schreib-Leserechte auf dem Server (UNIX CHMOD 777 (später bei Funktion 755 probieren= sicherer) für das Verzeichnis, 666 für das File (Bild/Datei), IIS/NT/Windows2000: Ordnerfreigabe: Vollzugriff  Datei: Write (W) ).
    Also melde Dich nochmal, ggf. auch per eMail.

    Gruss

    Michael

    1. Hallo Christian,

      Hi - ich fühl mich jetzt mal trotzdem angesprochen, auch wenn ich nicht Christian heiß ;-)

      HTML 4.0:
      <form method='POST' action='upload.asp'>

      Da fehlt ja genau die enctype-Angabe, dann werden zwar die Variablen übergeben, es kann aber kein echter Upload durchgeführt werden.

      ansonsten können wir nur helfen, wenn da der Abfrage-Code des ASP-Scripts sowie das Formular selbst hier steht..

      Der ASP-Code hat bisher 813 Zeilen, ich glaub nicht, es wär sinnvoll, den hier zu posten, zumal auch die Übergabe einer einzigen Variable nicht funktionieren will - siehe mein kleines Beispiel-Test-Script weiter unten.

      Wichtig sind auch Meta-Definitionen, der Zeichensatz und doctype-Definition, sowie Schreib-Leserechte auf dem Server (UNIX CHMOD 777 (später bei Funktion 755 probieren= sicherer) für das Verzeichnis, 666 für das File (Bild/Datei), IIS/NT/Windows2000: Ordnerfreigabe: Vollzugriff  Datei: Write (W) ).

      Einstweilen teste ich hier nur lokal mit dem IIS Version 5.1
      Da hab ich sowieso alle Rechte, weils hier ja lokal kein Sicherheitsrisiko ist. Mit dem Upload selbst gibts ja auch (noch) keine Probleme, weil ich dazu ja noch gar nicht gekommen bin.

      Das sind glaub ich alle relevanten Infos die ich Dir geben kann:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <title>...</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

      Grüße,
      sunny

  4. Hallo!

    Es gibt wirklich keine Möglichkeit, das Problem mit "normalem" ASP zu lösen. Ich hab dazu jetzt Folgendes gefunden:

    Why can't I use Request.Form in conjunction with an Upload?
    Uploading is performed via an Internet standard called RFC1867. This standard uses a different encoding scheme than typical HTML forms. Typically an HTML may be defined as:

    [FORM METHOD="POST" ACTION="PROCESS.ASP"]
    To upload files, an additional attribute must be specified:

    [FORM METHOD="POST" ACTION="PROCESS.ASP" ENCTYPE="MULTIPART/FORM-DATA"]
    This attribute changes the encoding type (ENCTYPE) of the form for efficiency of transfering large amounts of data. However, this encoding type is not understood by ASP's Request.Form method. It is unable to separate the file information from the other form data.

    Das heißt, das ganze Formular muss über eine zusätzliche Komponente verarbeitet werden. Und ich muss leider das ganze Script neu schreiben :(

    Trotzdem danke für eure Hilfe.

    Lg,
    sunny

    PS: Vielleicht könnte man im Feature-Artikel zum ASP-Upload da einen Hinweis drauf machen!?