web-dev-qa-db-de.com

Erhalte Dateinamen nach Dateileiter asynchron eine Datei geladen

ich lade mehrere Dateien in ein Verzeichnis, um einige Daten von ihnen zu analysieren. Das funktioniert bisher gut, aber ich würde gerne wissen, welche Datei ich mir anschaue. Ich brauche also den Namen der Datei, nachdem sie geladen wurde. Kann hier jemand helfen?

// ruft alle Dateien in dir auf

function updateData(){
  var dirReader = approot.createReader();

  var fail =failCB('Error - Directory for parsing failed to open'); // logs fail...
  dirReader.readEntries(parseData,fail); 
}

// jede Datei laden

function parseData(entries){
  var i;
  for (i=0; i<entries.length; i++) {
    var reader = new FileReader();
    reader.onloadend = createListItem;
    reader.readAsText(entries[i]);
  }
}

// HIER MÖCHTE ICH DEN NAMEN KENNEN !!!!

function createListItem(evt){
    // it gives me all the loaded data. But based on wich file it was, i would like to handle it!
  console.log(evt.target.result)
    // lets say something like this
    $('#content').find(   file.name   ).append(evt.target.result);
  }
}

beifall für Anregungen;)

27
Sidrich2009

Erstellen Sie einen Abschluss um File, um die aktuelle Datei zu erfassen. Dann können Sie den Dateinamen erhalten. 

Ein Beispiel: http://www.html5rocks.com/de/tutorials/file/dndfiles/#toc-reading-files

Schließung zum Erfassen der Dateiinformationen.

function parseData(entries){
  for (var i=0; i<entries.length; i++) {
    reader.onloadend = (function(file) {
      return function(evt) {
        createListItem(evt, file)
      };
    })(entries[i]);
    reader.readAsText(entries[i]);
  }
}

Und die aufgerufene Funktion erhält ein zusätzliches Argument

function createListItem(evt, file) {
  console.log(evt.target.result)
  console.log(file.name);
}
35
ebidel

Der folgende Quellcode fügt dem Dateireader ein Attribut hinzu 

    for(i=0; i < files.length; i++)
    {
        var fileReader = new FileReader();
        fileReader.onload = function(file)
        {
              // DO what you need here
              // file name = file.target.fileName
        } // end of reader load
        fileReader.fileName = files[i].name;
        fileReader.readAsBinaryString(files[i]);
    }
11
Thibault T

Eine andere Möglichkeit zur Lösung dieses Problems besteht darin, den Dateinamen nach dem Ereignis onload- mit dem Ereignis onloadend- wie folgt zu lesen:

for (var i = 0; i < files.length; i++) {

    var fileReader = new FileReader();

    fileReader.fileName = files[i].name;

    fileReader.onload = function () {
        /* do something with file */
    }

    fileReader.onloadend = function () {
        console.log(fileReader.fileName); // here you can access the original file name
    }

    fileReader.readAsText(files[i]);

}
0
C.Christensen