Ich lade Bilder in ein Servlet hoch. Die Überprüfung, ob es sich bei der hochgeladenen Datei um ein Bild handelt, erfolgt nur auf der Serverseite, indem die magischen Zahlen im Dateikopf überprüft werden. Gibt es eine Möglichkeit, die Erweiterungen auf der Clientseite zu überprüfen, bevor das Formular an das Servlet gesendet wird? Sobald ich die Eingabetaste drücke, wird der Upload gestartet.
Ich verwende Javascript und jQuery auf der Clientseite.
Update: Ich hatte schließlich eine serverseitige Validierung, die Bytes liest und den Upload ablehnt, wenn es sich nicht um ein Bild handelt.
jquery.ProgressBar.js
. Es funktioniert gut. ### Also, kann ich mit uploadify validieren !!!Antworten:
Es ist möglich, nur die Dateierweiterung zu überprüfen, aber der Benutzer kann virus.exe einfach in virus.jpg umbenennen und die Validierung "bestehen".
Hier ist der Code zum Überprüfen der Dateierweiterung und zum Abbrechen, wenn eine der gültigen Erweiterungen nicht erfüllt ist: (Wählen Sie eine ungültige Datei aus und versuchen Sie zu senden, um die Warnung in Aktion zu sehen.)
Beachten Sie, dass der Code es dem Benutzer ermöglicht, ohne Auswahl der Datei zu senden. Wenn dies erforderlich ist, entfernen Sie die Zeile
if (sFileName.length > 0) {
und die zugehörige schließende Klammer. Der Code überprüft alle in das Formular eingegebenen Dateien, unabhängig von ihrem Namen.Dies kann mit jQuery in weniger Zeilen durchgeführt werden, aber ich bin mit "rohem" JavaScript vertraut und das Endergebnis ist das gleiche.
Wenn Sie mehr Dateien haben oder die Prüfung beim Ändern der Datei und nicht nur beim Senden von Formularen auslösen möchten, verwenden Sie stattdessen diesen Code:
Dies zeigt eine Warnung an und setzt die Eingabe zurück, falls die Dateierweiterung ungültig ist.
quelle
var blnValid = false;
Pflichtfeld ist, können Sie die Zeile über arrInputs über die Schleife verschieben und dann nach der Schleife die Variable blnValid überprüfen: Wenn true, lassen Sie das Formular senden, andernfalls zeigen Sie die Warnung an, dass die Datei erforderlich ist.Keine der vorhandenen Antworten schien für die Einfachheit der Anfrage recht kompakt genug zu sein. Die Überprüfung, ob ein bestimmtes Dateieingabefeld eine Erweiterung aus einem Satz hat, kann wie folgt durchgeführt werden:
Die Beispielverwendung könnte also sein (wo
upload
ist dieid
einer Dateieingabe):Oder als jQuery-Plugin:
Anwendungsbeispiel:
Das
.replace(/\./g, '\\.')
dient dazu, dem Punkt für den regulären Ausdruck zu entkommen, sodass grundlegende Erweiterungen übergeben werden können, ohne dass die Punkte mit einem Zeichen übereinstimmen.Es gibt keine Fehlerprüfung bei diesen, um sie kurz zu halten. Wenn Sie sie verwenden, stellen Sie vermutlich sicher, dass die Eingabe zuerst vorhanden ist und das Erweiterungsarray gültig ist!
quelle
RexExp the "i" modifier, for example: return (new RegExp('(' + exts.join('|').replace(/\./g, '\\.') + ')$', "i")).test(fileName);
, "i"
nach dem Ende der Regex-Zeichenfolge ()$'
) hinzuzufügen . Dies wird Unterstützung für jedes Gehäuse in Dateinamenerweiterung (.jpg, .JPG, .Jpg, etc ...) hinzufügenquelle
Ich bin hierher gekommen, weil ich sicher war, dass keine der Antworten hier ziemlich ... poetisch war:
quelle
Überprüfen Sie, ob die Datei ausgewählt ist oder nicht
Überprüfen Sie die Dateierweiterung
quelle
Ich mag dieses Beispiel:
quelle
Wenn Sie Remote-URLs in einem Eingabefeld testen müssen, können Sie versuchen, einen einfachen regulären Ausdruck mit den Typen zu testen, an denen Sie interessiert sind.
Dadurch wird alles erfasst, was mit .gif, .jpg, .jpeg, .tiff oder .png endet
Ich sollte beachten, dass einige beliebte Websites wie Twitter ein Größenattribut an das Ende ihrer Bilder anhängen. Zum Beispiel würde Folgendes diesen Test nicht bestehen, obwohl es sich um einen gültigen Bildtyp handelt:
Aus diesem Grund ist dies keine perfekte Lösung. Aber es wird Sie zu ungefähr 90% des Weges bringen.
quelle
Verwenden Sie den Eingabetyp = "Datei", um die Upload-Dateien auszuwählen? Wenn ja, warum nicht das Attribut accept verwenden?
quelle
accept="image/*"
In den meisten Fällen ist es definitiv die klügste Wahl.versuchen Sie dies (funktioniert für mich)
quelle
Dies ist eine wiederverwendbarere Methode, vorausgesetzt, Sie verwenden jQuery
Bibliotheksfunktion (erfordert keine jQuery):
Seitenfunktion (erfordert jQuery (kaum)):
quelle
[Typoskript]
quelle
Sie können das
accept
für Eingabedateitypen verfügbare Attribut verwenden. MDN-Dokumentation zur Kassequelle
So wird es in jquery gemacht
quelle
Ein weiteres heutiges Beispiel über Array.prototype.some () .
quelle
quelle
quelle
Sie können ein Array erstellen, das den erforderlichen Dateityp enthält, und mit $ .inArray () in jQuery prüfen, ob der Dateityp im Array vorhanden ist.
quelle
Verwenden Sie diesen Code, wenn Sie die Schaltfläche zum Durchsuchen und die Dateierweiterung überprüfen möchten:
quelle
Wir können es beim Senden überprüfen oder ein Änderungsereignis für dieses Steuerelement vornehmen
quelle
Dies ist meiner Meinung nach die beste Lösung, die bei weitem viel kürzer ist als die anderen:
In diesem Fall wird die Funktion von einem Kendo Upload-Steuerelement mit folgender Einstellung aufgerufen:
.Events(e => e.Select("OnSelect"))
.quelle