Node.js - как отправить путь к файловой системе в ответе HTML для просмотра файлов в браузере - PullRequest
0 голосов
/ 13 января 2019

У меня есть ситуация, когда я хочу вернуть содержимое с моего экспресс-контроллера nodejs, который имеет ссылку на файловую систему для просмотра журналов в браузере.

Когда я нажимаю на эту ссылку, никаких действий не происходит, она не показывает мне журналы в браузере для пути к файлу, указанному в ссылке href, но то же самое работает, если я копирую путь непосредственно в адресную строку браузера.

Код:

'use strict';
var exec = require('child_process').execSync;
var fs = require('fs');
var path = require('path');
exports.list_all_tasks = function(req, res) {
    var output = exec('node --version');
    fs.writeFile('logs/output.log', output.toString(), function (err) {
      if (err) throw err;
      console.log("done");
    });
    res.send('<a href="file:///C:/myapp/logs/" target="_blank">Visit logs</a>');
};

Когда я нажимаю «Посетить журналы» в браузере, он должен перечислить все файлы в папке журналов в браузере, но это не работает. Если я скопирую 'file: /// C: / study / myapp / logs /' и вставлю в адресную строку, я смогу просмотреть все файлы в браузере.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Чтобы просмотреть файл журнала в браузере, вам сначала нужно прочитать файл на стороне сервера, а затем отправить его в ответ. Пример github repo

Пример:

// Show list
fs.readdir(path.join(__dirname, 'logs'), (err, data) => {
  if(!err && data.length > 0) {
    res.setHeader('Content-type', 'text/html');
    res.write('<a href="/">Back</a> </br><hr>');
    res.end(
      data.reduce((str, fileName) => {
        str += `<a href="/logs/${fileName}">${fileName}</a></br>`
        return str;
      }, '')
    );
  } else {
    res.writeHead(500);
    res.end();
  }
});
0 голосов
/ 13 января 2019

Есть вещи, которые нужно понять.

  1. Файл, связанный с помощью file:///, не будет / не будет найден, если файл / страница html открыта в другой системе (клиенте).

  2. Предполагая, что вы запускаете эту html-страницу с помощью веб-сервера http и в браузере, вы фактически открываете - http://host:port/your-web-page.html или похожую ссылку. В этом случае вы не сможете связывать и открывать файлы, используя file:/// из-за реализованной безопасности. Вы сможете открывать ссылки на файлы только с file:/// URL.

Из-за 2-го пункта большинство современных браузеров не допускают ссылки. Если вы хотите обойти (хотя и не рекомендуется), пожалуйста, проверьте здесь - Ссылка на локальные файлы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...