找回密码
 立即注册
查看: 304|回复: 1

用Node.js 实现一个简单的文件服务器

[复制链接]

11

主题

1

回帖

59

积分

雪白茶

积分
59
发表于 2024-10-24 16:44:53 | 显示全部楼层 |阅读模式



最近遇着个事,得一直发文件给同事,但是微信发东西是真的难绷,思来想去,用php写吧又要搭环境,太浪费时间,干脆用nodejs来试试。

#第一步

下载安装nodejs

地址:https://nodejs.org/zh-cn/download/package-manager

不知道怎么装环境的可以看下nodejs官网的指南

#第二步

写代码,创建一个文件,命名为server.js。

具体代码内容如下:


  1. const http = require('http');
  2. const fs = require('fs');
  3. const path = require('path');

  4. const PORT = 8080;
  5. const LIST_DIR = '/list'; // 设定一个特殊路径来触发目录列出
  6. const server = http.createServer((req, res) => {
  7.     if (req.method === 'GET') {

  8.         if (req.url === LIST_DIR) {
  9.             // 列出当前目录下的所有文件和文件夹  
  10.             fs.readdir(__dirname, (err, files) => {
  11.                 if (err) {
  12.                     res.writeHead(500, { 'Content-Type': 'text/plain' });
  13.                     res.end('Internal Server Error: Could not read directory');
  14.                     return;
  15.                 }
  16.                 let response = '<html><head><title>Directory Listing</title></head><body>\n';
  17.                 response += '<h1>Directory Listing:</h1>\n';
  18.                 response += '<ul>\n';
  19.                 files.forEach(file => {
  20.                     const encodedFile = encodeURIComponent(file);
  21.                     response += `<li><a href="http://localhost:${PORT}/${encodedFile}">${file}</a></li>\n`;
  22.                 });
  23.                 response += '</ul>\n';
  24.                 response += '</body></html>';

  25.                 res.writeHead(200, { 'Content-Type': 'text/html' });
  26.                 res.end(response);
  27.             });
  28.         } else {
  29.             const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);

  30.             fs.exists(filePath, (exists) => {
  31.                 if (exists) {
  32.                     fs.readFile(filePath, (err, data) => {
  33.                         if (err) {
  34.                             res.writeHead(500, { 'Content-Type': 'text/plain' });
  35.                             res.end('Internal Server Error');
  36.                             return;
  37.                         }

  38.                         const fileName = path.basename(filePath);  
  39.                         let contentType = 'application/octet-stream';  

  40.                         res.writeHead(200, {  
  41.                             'Content-Type': contentType,  
  42.                             'Content-Disposition': `attachment; filename="${fileName}"`  
  43.                         });  
  44.                         res.end(data);
  45.                     });
  46.                 } else {
  47.                     res.writeHead(404, { 'Content-Type': 'text/plain' });
  48.                     res.end('Not Found');
  49.                 }
  50.             });
  51.         }
  52.     } else {
  53.         res.writeHead(405, { 'Content-Type': 'text/plain' });
  54.         res.end('Method Not Allowed');
  55.     }
  56. });

  57. server.listen(PORT, () => {
  58.     console.log(`Server is running on http://localhost:${PORT}`);
  59. });
复制代码
然后执行node server.js
访问http://localhost:8080/list就能看到当前执行目录下的文件了。

2

主题

2

回帖

12

积分

雪白茶

积分
12
发表于 2024-10-26 10:50:53 | 显示全部楼层
666666666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|黑茶社区

GMT+8, 2025-1-23 03:11 , Processed in 0.021997 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表