File Uploads

Das Formularfeld “File Upload”

Upload Felder sind Formularfelder, mit denen der Formularbenutzer Ihnen eine Datei zukommen lassen kann. Diese Datei wird in ein Verzeichnis Ihrer Wahl auf Ihrem Server geladen. Sie können in Visforms einem Formular ein Upload Feld hinzufügen, indem Sie ein Feld vom Typ “File Upload” erstellen.

Das HTML Control “Upload File”

file upload control

Das Control, das bei einem Upload Feld im Formular angezeigt wird, hat einen Button. Mit dessen Hilfe kann eine Datei, die hochgeladen werden soll, auf dem lokalen Rechner ausgewählt werden. Weiterhin hat das Control einen Bereich, in dem der Dateiname der hochzuladenden Datei angezeigt wird. Die Anzeige des Dateinamen wird sichtbar, nachdem eine Datei mithilfe des Buttons ausgewählt wurde.

Der Browser kontrolliert das Aussehen des Controls

Das Control wird komplett vom Browser erzeugt. Es kann daher in unterschiedlichen Browsern unterschiedlich aussehen. Auch der Button-Text (z.B. “Durchsuchen”) wird vom Browser geliefert. Deshalb ändert sich die Sprache des Button-Texts auch nicht wie alle anderen Texte, wenn Sie eine mehrsprachige Joomla Webseite haben und die Sprache ändern.

Die Sprache des Button-Texts ist immer in der Sprache des Browsers. Diese wird durch das Betriebssystem festgelegt oder bei der Browser Installation gewählt/festgelegt. Die Sprache des Button-Texts kann daher mit Visforms nicht beeinflusst werden.

Dateiname kann nicht programmatisch gesetzt werden

Kein JavaScript-Zugriff möglich

Eine weitere Besonderheit des Upload Controls ist es, dass sein Wert, also welche Datei hochgeladen werden soll, nur durch die Verwendung des Buttons gesetzt werden kann. Sein Wert kann nicht programmatisch, gesetzt werden, etwa mit JavaScript. Das liegt daran, dass der Browser im Hintergrund eine Menge Arbeiten rund um die hochzuladende Datei ausführt. Diese Hintergrund-Arbeiten würden alle nicht erfolgen, wenn der Dateiname programmatisch gesetzt würde. Außerdem speichert der Browser dabei Informationen, die er für den Upload benutzt. Diese Arbeiten sind Browser-intern und können nicht von außen programmatisch beeinflusst werden.

Upload-Feld ist immer leer

Das ist auch der Grund dafür, warum ein Upload-Feld immer leer ist, wenn das Formular noch einmal vorlegt wird. Das geschieht immer dann, wenn bereits übermittelte Daten die Validierung auf dem Server nicht bestanden haben. Alle anderen, vom Benutzer bereits eingegebenen Informationen, sind davon nicht betroffen und werden wieder angezeigt.

Die hochzuladende Datei wird mit dem POST übermittelt

Der Prozess des Datei-Uploads besteht aus mehreren wesentlichen Schritten.

Der Browser ist hierbei dafür verantwortlich, dass die Daten der Datei an den Server übermittelt werden. So wie bei allen anderen Daten auch, die mit einem Formular übertragen werden. Hierzu werden auch die Daten der Datei gepackt und gemeinsam mit allen anderen Formulardaten an den Server geschickt.

Der Server entpackt die Daten und speichert die hochgeladene Datei unter einem temporären Namen in einem Zwischenverzeichnis.

Es ist dann die Aufgabe der Anwendung, in diesem Fall von Visforms, zu entscheiden, was weiter mit der temporären Datei geschieht. Hierzu gehört einerseits eine gründliche Validierung der Datei entsprechend den Vorgaben in der Formularkonfiguration bezüglich Größe, und Dateierweiterung. Andererseits gehört dazu eine Überprüfung entsprechend den Joomla Standards bezüglich der Frage, ob die Datei eventuell gefährliche Inhalte enthält. Visforms übernimmt schlussendlich auch das endgültige Speichern der Datei am in der Formularkonfiguration festgelegten Ort.

Ungünstige Servereinstellungen

Ungünstige Servereinstellungen können beim Hochladen von Dateien zu Fehlern führen.

Diese Einstellungen werden in der php.ini gemacht.

Jeder Server hat Einstellungen, die unter anderem regeln:

  • wie groß die Gesamtdatenmenge, die mit einem POST übertragen werden, maximal sein darf,
  • wie groß eine einzelne hochgeladene Datei maximal sein darf,
  • wie viele Daten maximal auf ein mal hochgeladen werden dürfen.

Fehler haben nichts mit Visforms zu tun

Wenn die vom Browser übermittelten Daten diesen Einstellungen nicht entsprechen, kommt es zu Fehlern. Die Fehler haben nichts mit Visforms oder bestimmten Einstellungen in Visforms zu tun. Insbesondere dann nicht, wenn der Request-Content insgesamt größer ist als der maximal erlaubte Wert für einen POST. In diesem Fall gehen alle übertragenen Daten verloren und es wird ein leerer POST übergeben.

Unmöglich übermittelte Formulardaten wieder anzuzeigen

Dann ist es zum Beispiel nicht möglich, bereits übermittelte Formulardaten wieder anzuzeigen. Das soll aber geschehen, wenn Visforms das Formular noch einmal vorlegt, weil die übermittelten Daten die Validierung auf dem Server nicht bestanden haben. Und dies ist ja auch sehr wahrscheinlich, weil die Daten ja fehlen.

Security Token fehlt

Auch der mit dem POST übergebene Security Token fehlt dann. Das kann dazu führen, dass die Meldung “Invalid Token” erscheint und das Formular nicht korrekt verschickt wird.

Einstellungen in der php.ini

Die folgenden Einstellungen der php.ini sind von besonderem Interesse:

  • upload_max_filesize: Diese Einstellung legt fest, wie groß eine einzelne hochgeladene Datei maximal sein darf.
  • post_max_size: Diese Einstellung legt fest, wie groß die Gesamtdatenmenge, die mit dem Formular übertragen wird, sein darf.
    Diese ergibt sich aus der Summe der Größe aller mit dem Formular hochgeladener Dateien.
    Also wenn das Formular mehr als ein Upload-Feld enthält plus der Größe aller anderen mit dem Formular übertragenen Daten.
    Dazu gehören auch die variablen Texte aus den Eingabefeldern.

Die Formularkonfiguration muss sich an die Server Einstellungen anpassen.

Die php.ini Einstellungen haben immer Vorrang vor Einstellungen, die Sie in der Formularkonfiguration festlegen. Angenommen Sie erlauben in einem Formular, dass bis zu 5 MB große Dateien hochgeladen werden dürfen. In der php.ini Ihrer Webseite steht aber ein upload_max_filesize von 4 MB. Dann kann keine Datei, die größer als 4 MB ist, hochgeladen werden. Jeder derartige Versuch führt zu einem Fehler.

Bitte stellen Sie deshalb immer sicher, dass die Einstellungen, die Sie in der Formularkonfiguration bezüglich der erlaubten Größe von Upload-Dateien vornehmen mit den Einstellungen in Ihrer Serverkonfiguration zusammen passen. Angenommen Sie haben 3 Upload Felder in Ihrem Formular. Dann sollte die erlaubte Dateigröße, die Sie in Visforms festlegen, kleiner als 1/3 von post_max_size sein.

Visforms validiert browserseitig, dass die Größe jedes einzelnen Upload-Files

  • unterhalb der “upload_max_filesize” und
  • unterhalb der im Formular festgelegten maximalen Dateigröße liegt. Andernfalls verhindert Visforms, dass ein Formular mit zu großen Dateien abgeschickt werden kann.

Server Einstellungen ermitteln

Sie können in der Administration Ihrer Webseite und System -> Systeminformationen unter dem Reiter “PHP-Informationen” herausfinden, welche Werte für Ihre Webseite festgelegt wurden.

Server Einstellungen anpassen

Viele Provider erlauben es Ihnen, die in der php.ini festgelegten Werte für diese Parameter zu überschreiben. Das kann etwa in einer .htaccess Datei oder in einer eigenen php.ini Datei erfolgen. Falls Ihnen die Werte in Ihrer Serverkonfiguration zu gering sind, fragen Sie bitte bei Ihrem Provider nach, ob und wie Änderungen möglich sind.