Как прочитать файл и вывести его содержимое в Input (NodeJs)?

Рейтинг: 0Ответов: 2Опубликовано: 12.01.2023
app.get("/download", function (request, response) {
  //response.sendFile(__dirname + "/txt/Example.txt");  
  let fileContent = fs.readFileSync("txt/Example.txt", "utf8");  
})

В fileContent получаю содержимое файла. Как его вывести в input страницы index.html?

Ответы

▲ 0

Файл по запросу можно вернуть несколькими способами...

Вот несколько способов.

// 1 - (используя стримы) загружаем часть файла и отправляем ее, до тех пор пока не отправим весь файл
const getFile = async(req, res, next) => {
  const fileStream = fs.createReadStream('path to file');

  fileStream.pipe(res);
};

// 2 - (не используя стримы) загружаем файл полностью в память и затем отправляем
const getFile = async(req, res, next) => {
  const file = fs.readFileSync('path to file');

  res.send(file);
};

// 3 - (читается само содержимое) отправить сам текст файла
app.get("/download", function(req, res) {
  fs.readFile("txt/Example.txt", "utf8", function(err, data) {
    if (err) {
      console.log(err); //вывод ишибок в консоль браузера
      res.status(500).send("Error while reading the file");
      return
    }
    res.send(fileContent);
  })
})

▲ -1

в вашем коде используется fs.readFileSync() вместо fs.readFile(), что означает, что код будет ожидать завершения чтения файла перед продолжением работы. Это может привести к задержке в ответе на запрос в случае большого размера файла или проблем с его доступностью. В большинстве случаев рекомендуется использовать fs.readFile() с функцией обратного вызова.

Например, если у вас есть <input type="text" id="input-file">, вы можете использовать следующий код

app.get("/download", function (request, response) {
  fs.readFile("txt/Example.txt", "utf8", function(err, data) {
    if (err) {
      console.log(err); //вывод ишибок в консоль браузера
      response.status(500).send("Error while reading the file");
    } else {
      document.getElementById("input-file").value = fileContent;
    }