Ich versuche, eine reine Skriptlösung zum Lesen des Inhalts einer Datei auf einem Clientcomputer über einen Browser bereitzustellen.
Ich habe eine Lösung, die mit Firefox und Internet Explorer funktioniert. Es ist nicht schön, aber ich probiere gerade nur Dinge aus:
function getFileContents() {
var fileForUpload = document.forms[0].fileForUpload;
var fileName = fileForUpload.value;
if (fileForUpload.files) {
var fileContents = fileForUpload.files.item(0).getAsBinary();
document.forms[0].fileContents.innerHTML = fileContents;
} else {
// try the IE method
var fileContents = ieReadFile(fileName);
document.forms[0].fileContents.innerHTML = fileContents;
}
}
function ieReadFile(filename)
{
try
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(filename, 1);
var contents = fh.ReadAll();
fh.Close();
return contents;
}
catch (Exception)
{
return "Cannot open file :(";
}
}
Ich kann anrufen getFileContents()
und es wird den Inhalt in den fileContents
Textbereich schreiben .
Gibt es eine Möglichkeit, dies in anderen Browsern zu tun?
Ich bin im Moment am meisten mit Safari und Chrome beschäftigt, aber ich bin offen für Vorschläge für jeden anderen Browser.
Bearbeiten: Als Antwort auf die Frage "Warum möchten Sie das tun?":
Grundsätzlich möchte ich den Dateiinhalt zusammen mit einem Einmalkennwort auf der Clientseite hashen, damit ich diese Informationen zur Bestätigung zurücksenden kann.
quelle
Antworten:
Bearbeitet, um Informationen zur Datei-API hinzuzufügen
Seit ich diese Antwort ursprünglich geschrieben habe, wurde die Datei-API als Standard vorgeschlagen und in den meisten Browsern implementiert (ab IE 10, der
FileReader
die hier beschriebene API- Unterstützung hinzufügte , jedoch noch nicht dieFile
API). Die API ist etwas komplizierter als die ältere Mozilla-API, da sie das asynchrone Lesen von Dateien, die bessere Unterstützung von Binärdateien und das Dekodieren verschiedener Textcodierungen unterstützt. Im Mozilla Developer Network sind einige Dokumentationen sowie verschiedene Beispiele online verfügbar. Sie würden es wie folgt verwenden:Ursprüngliche Antwort
In WebKit (also Safari und Chrome) scheint es keine Möglichkeit zu geben, dies zu tun. Die einzigen Schlüssel, die ein Dateiobjekt hat, sind
fileName
undfileSize
. Gemäß der Commit - Nachricht für die Datei und Filelist - Unterstützung, werden diese durch inspiriert Mozillas File - Objekt , aber sie scheinen nur einen Teil der Funktionen zu unterstützen.Wenn Sie dies ändern möchten, können Sie jederzeit einen Patch an das WebKit-Projekt senden . Eine andere Möglichkeit wäre, die Mozilla-API für die Aufnahme in HTML 5 vorzuschlagen . Die WHATWG- Mailingliste ist wahrscheinlich der beste Ort dafür. Wenn Sie dies tun, ist es viel wahrscheinlicher, dass es zumindest in ein paar Jahren einen browserübergreifenden Weg gibt, dies zu tun. Das Einreichen eines Patches oder eines Vorschlags zur Aufnahme in HTML 5 bedeutet natürlich einige Arbeit, um die Idee zu verteidigen, aber die Tatsache, dass Firefox sie bereits implementiert, gibt Ihnen zunächst etwas.
quelle
Um eine vom Benutzer ausgewählte Datei in einem Dialogfeld zum Öffnen von Dateien zu lesen, können Sie das
<input type="file">
Tag verwenden. Informationen dazu finden Sie bei MSDN . Wenn die Datei ausgewählt ist, können Sie den Inhalt mithilfe der FileReader-API lesen.quelle
Viel Spaß beim Codieren!
Wenn im Internet Explorer eine Fehlermeldung angezeigt wird, ändern Sie die Sicherheitseinstellungen, um ActiveX zuzulassen
quelle