Ответы:
Вот пример использования 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/
nullкаждого onClickсобытия должна помочь, см .: stackoverflow.com/a/12102992/63011
FileReader, но комментарий к displayContentsвышесказанному: обратите внимание, что innerHTMLподобная настройка для ненадежного контента может быть уязвимостью безопасности. (Чтобы убедиться в этом, создайте bad.txtнечто подобное <img src="/nonexistent" onerror="alert(1);">и убедитесь, что предупреждение выполняется - это может быть более вредоносный код.)
innerHTMLна textContent. Спасибо за ваш комментарий.
DOMContentLoadedсобытие для этого.
Средство HTML5 fileReader позволяет вам обрабатывать локальные файлы, но они ДОЛЖНЫ быть выбраны пользователем, вы не можете копаться на диске пользователя в поисках файлов.
В настоящее время я использую это с версиями разработки Chrome (6.x). Я не знаю, какие браузеры его поддерживают.
Поскольку у меня нет жизни, и я хочу эти 4 очка репутации, чтобы я мог проявить свою любовь к людям, которые действительно хороши в кодировании, я поделился своей адаптацией кода Паоло Моретти . Просто используйте openFile(функцию для выполнения с содержимым файла в качестве первого параметра) .
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(), вы можете просто позвонить fileInput.click(). (по крайней мере, в последней версии Chrome)
Пытаться
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
но пользователь должен принять меры, чтобы выбрать файл
Метод запроса xmlhttp недопустим для файлов на локальном диске, потому что безопасность браузера не позволяет нам сделать это. Но мы можем переопределить безопасность браузера, создав ярлык-> щелчок правой кнопкой мыши -> свойства в цели "... браузер location path.exe "append --allow-file-access-from-files. Это проверено на chrome, однако следует позаботиться о том, чтобы все окна браузера были закрыты и код запускался из браузера, открытого с помощью этого ярлыка.
Javascript обычно не может получить доступ к локальным файлам в новых браузерах, но объект XMLHttpRequest может использоваться для чтения файлов. Так что на самом деле это Ajax (а не Javascript), который читает файл.
Если вы хотите прочитать файл abc.txt, вы можете написать код как:
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();
Теперь txtсодержит содержимое файла abc.txt.