Как открыть файл локального диска с помощью JavaScript?
Я пытался открыть файл с
window.open("file:///D:/Hello.txt");
Браузер не позволяет открывать локальный файл таким образом, вероятно, из соображений безопасности. Я хочу использовать данные файла на стороне клиента. Как я могу прочитать локальный файл в JavaScript?
Ответы
Ответ 1
Вот пример, используя 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>
Ответ 2
средство HTML5 fileReader позволяет обрабатывать локальные файлы, но они ДОЛЖНЫ быть выбраны пользователем, вы не можете обманывать пользователей диск ищет файлы.
В настоящее время я использую это с версиями разработки Chrome (6.x). Я не знаю, что поддерживают другие браузеры.
Ответ 3
Поскольку у меня нет жизни, и я хочу эти 4 очка репутации, чтобы я мог проявить свою любовь к людям, которые действительно хорошо умеют писать, я поделился своей адаптацией кода Паоло Моретти. Просто используйте openFile(
функция должна быть выполнена с содержимым файла в качестве первого параметра )
.
function dispFile(contents) {
document.getElementById('contents').innerHTML=contents
}
function clickElem(elem) {
// Thx user1601638 on Stack Overflow (6/6/2018 - https://stackoverflow.com/questions/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>
Ответ 4
Попробуйте
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
async function read(input) {
msg.innerText = await readFile(input.files[0]);
}
<input type="file" onchange="read(this)"/>
<h3>Content:</h3><pre id="msg"></pre>
Ответ 5
Метод запроса xmlhttp недействителен для файлов на локальном диске, потому что безопасность браузера не позволяет нам это делать. Но мы можем переопределить безопасность браузера, создав ярлык- > право-щелчок- > свойства в целевом "... browser location path.exe" append --allow-file-access-from-files.This проверяется на chrome, однако следует позаботиться о том, чтобы все окна браузера были закрыты, а код должен запускаться из браузера, открытого через этот ярлык.
Ответ 6
Вы не можете. Новые браузеры, такие как Firefox, Safari и т.д. Блокируют протокол "файл". Он будет работать только в старых браузерах.
Вам нужно будет загрузить нужные файлы.
Ответ 7
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.