Работа с файлами HTML and JS

113
23 октября 2021, 17:20

Создаю программу и надо решить проблему: В программе есть окошко для выбора текстового файла, код:

<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 чтобы дотянуться до содержания файла и безуспешно. Сможете помочь?

Заранее спасибо!

Answer 1

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

Answer 2

В вашем коде используется 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

READ ALSO
библиотека js-cookie

библиотека js-cookie

подскажите пожалуйста , есть библиотека fakerjs для генерации имени , как сделать так чтоб при первом заходе на сайт одно имя записалось в куку...

158
Почему не работают табы?

Почему не работают табы?

Почему не работают мульти вложенные табы, когда родители обернуты в <div>? Конечно же не дает sublings, но как сделать по другому?

219
Не срабатывает вызов функции JQUERY

Не срабатывает вызов функции JQUERY

есть код, после завершения таймера должна срабатывать requestAnimationFrame(animate) - отрисовка canvas, но она не срабатывает

98
Необходимо кешировать данные с помощью memcached

Необходимо кешировать данные с помощью memcached

Пробовал гетеры сетеры, но ничего не выводится, даже прологировать не вышло(попали ли данные в кеш или нет или подключился memcached или нет) https://wwwnpmjs

284