Artikel - Detailansicht

Icon Aktuelles Mehrfacher Fileupload - Die einfache Variante, Teil II

Hat der User das Formular ausgefüllt und die Dateien ausgewählt kann er alle Daten mit einem Submit zum Server schicken. Dabei wird wieder das Script form.cfm aufgerufen, diesmal jedoch mit der POST-Methode. Deshalb können wir diesen Aufruf zu Begin des Scripts mit:

<CFIF CompareNoCase(CGI.REQUEST_METHOD,"POST")>

erkennen und in den Uploadcode verzweigen.
In der FORM-Variable FORM.fcount erhalten wir die maximale Anzahl der übermittelten Dateien.

Wir müssen jetzt in einem Loop den Upload für jede Datei mit dem Coldfusiontag
<CFFILE ACTION="UPLOAD" ...> durchführen:

<cfloop index="idx" from="1" to="#FORM.fcount#">
  <cfif len(evaluate("FORM.file#idx#">))>
    <CFFILE ACTION="UPLOAD" FILEFIELD="FORM.file#idx#"
    DESTINATION="#expandPath('temp')#" NAMECONFLICT="makeunique">
  </cfif>
</cfloop>  

Die Namen der Formelemente für den Fileinput hatten wir dynamisch generiert, jetzt können wir wieder durch Generierung des Namens über diese FORM-Variablen loopen.

Das Beispielprogramm benötigt im aktuellen Verzeichniss ein Unterverzeichniss temp, in dem die Dateien nach dem Upload abgelegt werden.

Da der User allerdings auch ein FileInput-Feld nicht benutzt haben kann, prüfen wir vor jedem <CFFILE> mit:

<cfif len(evaluate("FORM.file#idx#"))>

ob eine Datei gewählt wurde und führen erst dann den Upload aus, wenn für dieses Fileinput-Elemente eine Datei gewählt wurde.

Nach dem Upload jeder Datei geben wir uns zu Kontrolle mit File.ClientFile,File.ServerFile und File.FileSize den Originaldateinamen, den Serverdateinamen und die Dateilänge aus.
(der Serverdateiname entsteht, da wir mit NAMECONFLICT="makeunique" ColdFusion angewiesen haben, beim Upload einen eindeutigen Dateinamen zu erzeugen, falls eine Datei gleichen Namens bereits vorhanden ist. Anderenfalls würde die bestehende Datei überschrieben werden!)

In einem weiteren Artikel zu diesem Thema wird demnächste eine weitere Möglichkeit des Fileuploads gezeigt werden, die einige Vorteile gegenüber dem hier gezeigten Beipiel aufweist, aber dafür selbstvertsändlich auch anderen Nachteile mitbringt :-).


Hier der komplette Code:

<CFIF CompareNoCase(CGI.REQUEST_METHOD,"POST")>
  <!--- = GET ------------------------------->
  
  <!--- da hier keine FORM-Variablen existieren werden diese selbst gesetzt --->
  <cfset FORM.email="">
  <cfset FORM.name="">
  <cfset FORM.fcount="3">
<cfelse>
  <!--- POST =Upload durchfuehren--->
  <cfparam name="FORM.email" type="string">
  <cfparam name="FORM.name" type="string">
  <cfparam name="FORM.fcount" type="numeric"&gt;
  <cfparam name="FORM.oldfcount" type="numeric">

  <cfif FORM.oldfcount eq FORM.fcount>
    <!--- Formsubmit wurde durchgefuehrt--->
    <cfoutput>
    <b>Email:</b>#HTMLEditFormat(FORM.email)#<br>
    <b>Name:</b>#HTMLEditFormat(FORM.name)#<br><br>
    </cfoutput>

    <b>Upload:</b><br>
    <table border="1">
    <tr>
      <td> </td>
      <td>Clientfile</td>
      <td>Serverfile</td>
      <td>Grösse</td>
    </tr>
    <cfloop index="idx" from="1" to="#FORM.fcount#">
      <cfif len(evaluate("FORM.file#idx#"))>
        <!--- Datei ins Temp-Verzeichnis schreiben --->
        <CFFILE ACTION="UPLOAD" FILEFIELD="FORM.file#idx#"
        DESTINATION="#expandPath('temp')#" NAMECONFLICT="makeunique">
        <tr>
        <cfoutput>
        <td>#idx#.</td>
        <td>#File.ClientFile#</td>
        <td>#File.ServerFile#</td>
        <td>#File.FileSize#</td>
        </cfoutput>
        </tr>
      </cfif>
    </cfloop>
    </table>
    <a href="<cfoutput>#CGI.script_name#</cfoutput>">back</a>
    <cfabort>
  </cfif>
</cfif>

<html>
<head>
  <title>form.cfm</title>
</head>

<body>

<b>Mehrfacher Fileupload V1</b><br>

<cfoutput>
<FORM ACTION="#CGI.script_name#" METHOD="POST" ENCTYPE="multipart/form-data" name="f">
<input type="Hidden" name="oldfcount" value="#FORM.fcount#">
Email: <input type="Text" name="email" value="#HTMLEditFormat(FORM.email)#"><br>
Name: <input type="Text" name="name" value="#HTMLEditFormat(FORM.name)#"><br><br>
<b>Fileupload:</b><br>
Anzahl der Dateien:
<select name="fcount" onchange="document.f.submit()">
  <cfloop index="idx" from="1" to="50">
  <option value="#idx#" <cfif FORM.fcount eq idx>selected</cfif> >#idx#</option>
  </cfloop>
</select>
<br>
<cfloop index="idx" from="1" to="#FORM.fcount#">
  <INPUT TYPE="FILE" NAME="file#idx#"><br>
</cfloop>
<input type="Submit" value="und tschüß">
</form>
</cfoutput>

</body>
</html>


Steffen Golfdfuss steffen@goldfuss.de - 15.12.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen