Node.js-如何在HTML响应中发送文件系统路径以在浏览器中查看文件

时间:2019-01-13 03:53:42

标签: html node.js http express

在这种情况下,我想从我的nodejs express控制器返回内容,该控制器具有文件系统链接以在浏览器中查看日志。

当我单击此链接时,没有任何动作,它不会向我显示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 :(得分:0)

有些事情需要理解。

  1. 如果file:///文件/页面在另一个系统(客户端)上打开,则将/可能找不到使用html链接的文件。

  2. 假设您正在使用http网络服务器并在浏览器中运行此html页面,则实际上可以打开-http://host:port/your-web-page.html或类似链接。在这种情况下,由于实现了安全性,您将无法使用file:///链接和打开文件。您将只能通过file:///网址打开文件链接。

由于第二点,大多数现代浏览器将不允许链接。如果您需要解决方法(虽然不建议使用),请在此处查看-Link to Local files

答案 1 :(得分:0)

要在浏览器中查看日志文件,您需要先在服务器端读取文件,然后将其发送给响应。 Example 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();
  }
});