Odpowiedzi:
Oto przykład wykorzystujący FileReader:
function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
displayContents(contents);
};
reader.readAsText(file);
}
function displayContents(contents) {
var element = document.getElementById('file-content');
element.textContent = contents;
}
document.getElementById('file-input')
.addEventListener('change', readSingleFile, false);
<input type="file" id="file-input" />
<h3>Contents of the file:</h3>
<pre id="file-content"></pre>
http://dev.w3.org/2006/webapi/FileAPI/
nullna każde onClickzdarzenie powinno załatwić sprawę, patrz: stackoverflow.com/a/12102992/63011
FileReader, ale komentarz do displayContentspowyższego: zwróć uwagę, że innerHTMLtakie ustawienie z niezaufaną zawartością może stanowić lukę w zabezpieczeniach. (Aby zobaczyć to na własne oczy, utwórz plik bad.txtzawierający coś w rodzaju <img src="/nonexistent" onerror="alert(1);">i zobacz, że alert zostanie wykonany - może to być bardziej złośliwy kod).
innerHTMLz textContent. Dzięki za komentarz.
DOMContentLoadedwydarzenia.
Funkcja fileReader HTML5 pozwala na przetwarzanie lokalnych plików, ale MUSZĄ one zostać wybrane przez użytkownika, nie możesz zrootować dysku użytkownika w poszukiwaniu plików.
Obecnie używam tego z wersjami programistycznymi Chrome (6.x). Nie wiem, jakie inne przeglądarki to obsługują.
Ponieważ nie mam życia i chcę mieć te 4 punkty reputacji, abym mógł pokazać swoją miłość ludziom, którzy są naprawdę dobrzy w kodowaniu (popieraj ich), podzieliłem się moją adaptacją kodu Paolo Morettiego . Po prostu użyj openFile(funkcji do wykonania z zawartością pliku jako pierwszym parametrem) .
function dispFile(contents) {
document.getElementById('contents').innerHTML=contents
}
function clickElem(elem) {
// Thx user1601638 on Stack Overflow (6/6/2018 - /programming/13405129/javascript-create-and-save-file )
var eventMouse = document.createEvent("MouseEvents")
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
elem.dispatchEvent(eventMouse)
}
function openFile(func) {
readFile = function(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
fileInput.func(contents)
document.body.removeChild(fileInput)
}
reader.readAsText(file)
}
fileInput = document.createElement("input")
fileInput.type='file'
fileInput.style.display='none'
fileInput.onchange=readFile
fileInput.func=func
document.body.appendChild(fileInput)
clickElem(fileInput)
}
Click the button then choose a file to see its contents displayed below.
<button onclick="openFile(dispFile)">Open a file</button>
<pre id="contents"></pre>
clickElem(), możesz po prostu zadzwonić fileInput.click(). (przynajmniej w najnowszej wersji Chrome)
Próbować
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
ale użytkownik musi podjąć działania, aby wybrać plik
Metoda żądania xmlhttp nie jest prawidłowa dla plików na dysku lokalnym, ponieważ zabezpieczenia przeglądarki nam na to nie pozwalają.Ale możemy nadpisać zabezpieczenia przeglądarki, tworząc skrót -> kliknięcie prawym przyciskiem myszy -> właściwości W przeglądarce docelowej "... location path.exe "append --allow-file-access-from-files. Jest to testowane na chrome, jednak należy uważać, aby wszystkie okna przeglądarki były zamknięte, a kod uruchamiany z przeglądarki otwartej za pomocą tego skrótu.
JavaScript zazwyczaj nie może uzyskać dostępu do plików lokalnych w nowych przeglądarkach, ale obiekt XMLHttpRequest może służyć do odczytywania plików. Więc to właśnie Ajax (a nie Javascript) czyta plik.
Jeśli chcesz odczytać plik abc.txt, możesz napisać kod jako:
var txt = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
txt = xmlhttp.responseText;
}
};
xmlhttp.open("GET","abc.txt",true);
xmlhttp.send();
Teraz txtzawiera zawartość pliku abc.txt.