2016-07-26 17 views
-1

Ich versuche, eine CSV-Datei per Drag-and-Drop hochladen, aber wenn ich etwas anderes, wie eine Excel-Datei hochladen, bekomme ich keine Warnmeldung. Was mache ich falsch?Überprüfen Sie die letzten Zeichen der Zeichenfolge

Ich rufe die folgende Funktion auf, die eigentlich prüfen sollte, ob ich eine CSV-Datei hochlade. Später, nachdem ich die Dateiendung überprüft habe, lese ich die Datei und fülle eine Tabelle mit Daten, die ich in dieser (CSV) -Datei habe. Deshalb ist es wichtig, dass es außer CSV keinen anderen Upload-Typ gibt. Hier

ist der Code:

function handleFileSelection(evt) { 
    evt.stopPropagation(); // Do not allow the drop event to bubble. 
    evt.preventDefault(); // Prevent default drop event behavior. 

    var files = evt.dataTransfer.files; // Grab the list of files dragged to the drop box. 

    if (!files) { 
     alert("<p>At least one selected file is invalid - do not select any folders.</p><p>Please reselect and try again.</p>"); 
     return; 
    } 

    // "files" is a FileList of file objects. Try to display the contents of each file: 
    for (var i = 0, file; file = files[i]; i++) { 
     if (!file) { 
      alert("Unable to access " + file.name); 
      continue; // Immediately move to the next file object. 
     } 
     if (file.size == 0) { 
      alert("Skipping " + file.name.toUpperCase() + " because it is empty."); 
      continue; 
     } 
     if (!file.name.endsWith == ".csv") { 
      alert("Skipping " + file.name.toUpperCase() + " because it is not a known text file type."); 
      continue; 
     } 
     startFileRead(file); // Asychronously fire off a file read request. 
    } 
} 
+0

Bitte geben Sie mehr Kontext und Code. Wo rufst du diesen Code an? Wo ist das Datei-Array definiert? – trincot

Antwort

0

Das Problem ist, mit dieser Zeile:

if (!file.name.endsWith == ".csv") { 

Sie vergleichen die Negation einer Eigenschaft mit ".csv", während Sie wahrscheinlich the function with that name ausführen wollten.

Allerdings ist diese Funktion nicht in allen Browsern verfügbar, so dass Sie von dieser alternativen besser sein:

if (file.name.search(/\.csv$/) === -1) { 

Bemerkung

Der Code im ersten if Block ausführen wird nie , weil !file immer zu false ausgewertet wird. Dies liegt daran, dass die Schleifenbedingung in der for-Schleife (der mittlere Ausdruck: file = files[i]) die Schleife beendet, sobald file zu Falsy wird.

+0

vielen Dank, es funktioniert! Wissen Sie, ob es auch eine Möglichkeit gibt, die Kodierung der Datei zu überprüfen? Sagen wir: Meine Datei sollte "UTF-8" sein, und wenn dies nicht der Fall ist, warne ich den Benutzer darüber? Vielen Dank! –

+0

Gern geschehen. Über die Verschlüsselung: Das ist wirklich eine andere Frage, und ich bin nicht sicher, wie das selbst gemacht werden kann. Kann ich Sie bitten, es als neue Frage zu veröffentlichen? Auf diese Weise werden Sie wieder andere Leute anziehen, um es sich anzusehen. – trincot

-2

Wo haben Sie diese:

if (!file.name.endsWith == ".csv") { 

du wollen:

if (!file.name.endsWith(".csv")) { 
+0

es funktioniert nicht. Wenn ich in Ihrem Beispiel mag, wird meine CSV-Datei überhaupt nicht hochgeladen. –

Verwandte Themen