Próbuję udostępnić tylko skryptowe rozwiązanie do odczytywania zawartości pliku na komputerze klienckim za pośrednictwem przeglądarki.
Mam rozwiązanie, które działa z przeglądarkami Firefox i Internet Explorer. To nie jest ładne, ale w tej chwili tylko próbuję:
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 :(";
}
}
Mogę zadzwonić getFileContents()
i zapisze zawartość w polu fileContents
tekstowym.
Czy można to zrobić w innych przeglądarkach?
W tej chwili najbardziej interesują mnie Safari i Chrome, ale jestem otwarty na sugestie dotyczące innych przeglądarek.
Edycja: w odpowiedzi na pytanie „Dlaczego chcesz to zrobić?”:
Zasadniczo chcę zhaszować zawartość pliku wraz z jednorazowym hasłem po stronie klienta, aby móc odesłać te informacje jako weryfikację.
javascript
html
file-io
sandbox
Damovisa
źródło
źródło
Odpowiedzi:
Edytowano, aby dodać informacje o interfejsie File API
Ponieważ pierwotnie napisałem tę odpowiedź, API File zostało zaproponowane jako standard i zaimplementowane w większości przeglądarek (od IE 10, która dodała obsługę
FileReader
opisanego tutaj API, choć jeszcze nieFile
API). API jest nieco bardziej skomplikowane niż starsze API Mozilli, ponieważ zostało zaprojektowane do obsługi asynchronicznego odczytu plików, lepszej obsługi plików binarnych i dekodowania różnych kodowań tekstu. W sieci Mozilla Developer Network dostępna jest pewna dokumentacja, a także różne przykłady w Internecie. Użyłbyś go w następujący sposób:Oryginalna odpowiedź
Wygląda na to, że nie ma na to sposobu w WebKit (a więc w Safari i Chrome). Jedyne klucze, które ma obiekt File , to
fileName
ifileSize
. Zgodnie z komunikatem zatwierdzenia dla obsługi File i FileList, są one inspirowane obiektem File Mozilli , ale wydaje się, że obsługują tylko podzbiór funkcji.Jeśli chcesz to zmienić, zawsze możesz wysłać poprawkę do projektu WebKit. Inną możliwością byłoby zaproponowanie API Mozilli do włączenia do HTML 5 ; WHATWG lista dyskusyjna jest prawdopodobnie najlepszym miejscem, aby to zrobić. Jeśli to zrobisz, jest znacznie bardziej prawdopodobne, że będzie można to zrobić za pomocą różnych przeglądarek, przynajmniej za kilka lat. Oczywiście przesłanie poprawki lub propozycji włączenia do HTML 5 oznacza trochę pracy w obronie pomysłu, ale fakt, że Firefox już go implementuje, daje ci od czego zacząć.
źródło
Aby odczytać plik wybrany przez użytkownika, korzystając z okna dialogowego otwierania pliku, możesz użyć
<input type="file">
tagu. Informacje na ten temat można znaleźć w witrynie MSDN . Po wybraniu pliku możesz użyć FileReader API do odczytania zawartości.źródło
Miłego kodowania!
Jeśli pojawi się błąd w przeglądarce Internet Explorer, zmień ustawienia zabezpieczeń, aby zezwolić na obsługę formantów ActiveX
źródło