Создаю программу и надо решить проблему: В программе есть окошко для выбора текстового файла, код:
<h1>Выберите файл!</h1>
<div class="custom-file">
<input type="file" class="custom-file-input" id="selectFile">
<label class="custom-file-label" for="selectFile">Choose file</label>
<a class="btn btn-info" onclick="loadFile()" role="button">Загрузить</a>
</div>
А потом вступает в силу JS и он должен принять этот файл и достать его вместимость, то что написано внутри этого файла. Мой код:
const fs = require('fs');
function loadFile(){
var input = document.getElementById("selectFile").value;
//смотрел в инете, value использовалось для принимания данных из формы input
fs.writeFileSync('TEST', input);
//это мне для наглядности чтобы проверить что он принял
}
Но я принимаю путь к этому файлу, смотрел в интернете на что можно поменять value чтобы дотянуться до содержания файла и безуспешно. Сможете помочь?
Заранее спасибо!
function loadFile(){
// files - объект типа FileList
let files = document.getElementById("selectFile").files;
// Перебираем все файлы
for (var i = 0; i < files.length; i++) {
// file - объект типа File
file = files.item(i);
console.log(file.name);
// Получаем содержимое файла в виде текста
file
.text()
.then(text => {
console.log(text);
});
}
}
<h1>Выберите файл!</h1>
<div class="custom-file">
<label class="custom-file-label" for="selectFile">Choose file</label>
<input type="file" class="custom-file-input" id="selectFile" onChange="loadFile()">
</div>
FileList
File
В вашем коде используется fs
, но это Node.js модуль, его нету в браузере. В браузере нет возможности работать с файловой системой напрямую, но можно в начале загрузить файл, а затем предложить заново сохранить его.
Пример загрузки файла и чтения его содержимого с помощью FileReader:
function onFileLoad(event) {
const input = event.target;
if(input.files.length > 0) {
readTextFromFile(input.files[0])
.then(text => {
document.getElementById('text').value = text;
})
.catch(err => console.log(err))
}
}
function readTextFromFile(file) {
const reader = new FileReader();
return new Promise((resolve, reject) => {
reader.onload = event => resolve(event.target.result)
reader.onerror = error => reject(error)
reader.readAsText(file)
})
}
<h1>Выберите файл!</h1>
<div class="custom-file">
<input type="file" onChange="onFileLoad(event)" class="custom-file-input" id="selectFile">
<label class="custom-file-label" for="selectFile">Choose file</label>
</div>
<h1>Result</h1>
<textarea id="text"></textarea>
Дополнение
В связи с новой информацией по вопросу добавляю пример для node.js
const fs = require('fs').promises;
async function main() {
try {
const text = await fs.readFile("f:/test.txt", 'utf8'); // читаем текст
console.log(text); // выводим текст
await fs.writeFile("f:/text2.txt", text); // сохраняем текст в другой файл
} catch (e) {
console.log(e);
}
}
main();
Данный пример работает на Node.js
начиная с версии 10, на более старых версиях fs.promises
экспериментальный функционал и не работает без флага.
Документация fs.readFile и fs.writeFile
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
подскажите пожалуйста , есть библиотека fakerjs для генерации имени , как сделать так чтоб при первом заходе на сайт одно имя записалось в куку...
Почему не работают мульти вложенные табы, когда родители обернуты в <div>? Конечно же не дает sublings, но как сделать по другому?
есть код, после завершения таймера должна срабатывать requestAnimationFrame(animate) - отрисовка canvas, но она не срабатывает
Пробовал гетеры сетеры, но ничего не выводится, даже прологировать не вышло(попали ли данные в кеш или нет или подключился memcached или нет) https://wwwnpmjs