Frage

Ist es im Spielrahmen möglich, ein Feld abzulehnen?

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));

ohne die Seite neu zu laden?

Ich habe ein Dateieingabefeld, mit dem Benutzer Dateien auswählen können.Beim Zurückweisen und erneuten Laden werden die Dateien gelöscht und der Fehler wird angezeigt.Ich möchte, dass die ausgewählten Dateien dort sind

Aktuelles Verhalten:Vor dem Absenden des Formulars:

Before

Nach dem Absenden (mit Fehler:Dateien sind weg)

Before

War es hilfreich?

Lösung

Eingabefelder zur Dateiauswahl (d. h. <input type="file" ... />) unterscheiden sich von anderen Eingabefeldern – Sie können den Wert nicht serverseitig vorab ausfüllen.Es wäre eine riesige Sicherheitslücke, wenn Sie (denken) könnten <input type="file" value="/etc/passwd" .. />).Wenn Sie auf dem Server das übermittelte Formular erhalten, erhalten Sie nicht den vollständigen Pfad zur hochgeladenen Datei, sondern nur den Namen der Datei und den Inhalt.

Wenn Sie den Wert Ihres Dateieingabefelds wirklich beibehalten müssen, müssen Sie einen anderen Weg gehen:Senden Sie das Formular über Ajax (googlen Sie nach „Ajax-Datei-Upload“, um einige Techniken und Bibliotheken zu finden, die dabei helfen) und verwenden Sie die Ajax-Antwort, um anzugeben, ob die Datei gültig war oder nicht.


Weitere Klarstellung:Bei der normalen HTML/HTTP-Post-Methode (die von den Play Forms-Helfern verwendet wird) ist die Originalseite verschwunden und die Serverantwort ist eine neue Seite ohne Verbindung zur vorherigen Seite.Die Play Forms-Helfer füllen die Eingabefelder auf dieser Seite vorab mit den vorherigen Werten aus, aber wie oben erläutert, ist dies für ein Dateieingabefeld nicht möglich.

Aus diesem Grund gibt es spezielle Javascript-Bibliotheken zum Hochladen von Dateien.Wenn sich Ihr Formular hauptsächlich mit dem Hochladen von Dateien befasst, sollten Sie sich diese ansehen.(z.B. http://fineuploader.com).Auf der Serverseite wird das Ziel der Ajax-Abfrage eine neue Aktion sein, die lediglich die hochgeladenen Dateien verarbeitet und eine Erfolgs-/Fehlermeldung zurückgibt, die Sie dann dem Benutzer anzeigen würden.

Andere Tipps

Wenn der Server den Wert eines Dateifelds manipulieren kann, wäre das ein wesentliches Sicherheitsrisiko, da wir jede Datei von der Benutzer-Festplatte annehmen könnten.Wenn wir uns auf die beiden Anforderungen ansehen, die Sie haben,

  • Holen Sie sich den Dateiinhalt auf dem Server
  • stören den Client-Ui-Status nicht

    Die einzige Option ist, einen AJAX-Datei-Uploader zu verwenden.Ihr Fluss wird also jetzt:

    • Übermitteln Sie die Datei über AJAX-Upload
    • Validieren Sie den Inhalt
    • Speichern Sie die Datei zum späteren Retrieval
    • Senden Sie den Status zurück (OK oder Fehler)
    • Zeigt den Fehler auf Fehler an
    • Nachdem das gesamte Formular eingereicht wird, suchen Sie auf die zuvor gespeicherte Datei

      Sie können wahrscheinlich ein Bit betrügen, wenn Sie nichts dagegen haben, die Last nicht durchführen - einfach die Validierung mit AJAX, um die Fehlermeldung anzuzeigen und die Datei erneut auf ein normales Subgut hochgeladen zu lassen.

      Es ist alles über das Arbeiten mit den Grenzen, die wir haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top