对于这个问题,你需要完成两个主要任务:
- 获取本地文件夹中所有文件的名称。
- 点击文件名后,能够正确展示文件内容(文本或图片)。
下面是一个简单的示例代码,展示了如何实现这两个功能。这里我们假设你的文件夹路径是./files
。
首先,确保安装了express
框架,用于搭建Web服务器。可以通过以下命令安装:
npm install express
接下来是代码示例:
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const folderPath = './files';
// 显示文件列表
app.get('/files', (req, res) => {
fs.readdir(folderPath, (err, files) => {
if (err) {
return res.status(500).send('Error reading directory.');
}
res.render('fileList', { files });
});
});
// 显示文件内容
app.get('/files/:name', (req, res) => {
const filePath = path.join(folderPath, req.params.name);
fs.readFile(filePath, 'utf-8', (err, data) => {
if (err) {
return res.status(404).send('File not found.');
}
// 根据文件扩展名判断文件类型
const ext = path.extname(filePath);
if (ext === '.txt') {
res.send(data); // 文本文件直接发送内容
} else if (ext.match(/\.(jpg|jpeg|png|gif)$/i)) {
res.type(ext.slice(1)); // 图片文件设置正确的MIME类型
res.send(fs.readFileSync(filePath));
} else {
res.send('Unsupported file type.');
}
});
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
上面的代码做了两件事:
- 在
/files
路由下列出所有文件名。
- 在
/files/:name
路由下显示文件内容,根据文件扩展名区分处理文本文件和图片文件。
为了使上述代码工作,你需要一个模板引擎来渲染文件列表页面。这里以EJS为例,你可以通过以下命令安装EJS模板引擎:
npm install ejs
然后创建一个名为fileList.ejs
的文件,放置在项目根目录下的views
文件夹中,用于展示文件列表。例如:
<!DOCTYPE html>
<html>
<head>
<title>Files List</title>
</head>
<body>
<h1>Files</h1>
<ul>
<% files.forEach(file => { %>
<li><a href="/files/<%= file %>"><%= file %></a></li>
<% }) %>
</ul>
</body>
</html>
这段HTML会将每个文件名作为链接,用户点击后会请求对应的文件内容。
以上就是完整的实现流程,希望对你有所帮助。