nodejs+express实现文件上传下载管理网站

下面是“nodejs+express实现文件上传下载管理网站”的完整攻略。

第一步:初始化项目

首先,需要在本地创建一个空的文件夹,并进入该文件夹:

mkdir file-manager
cd file-manager

接着,需要使用npm初始化该项目:

npm init -y

这将会生成一个package.json文件,用于配置项目信息和依赖项。

第二步:安装依赖项

需要安装以下几个依赖项:

  • express:用于创建Web应用程序;
  • multer:用于处理文件上传;
  • mime:用于获取文件的MIME类型。

通过以下命令进行安装:

npm install express multer mime --save

第三步:创建目录结构

需要创建以下几个文件夹:

  • public:用于存放静态文件;
  • uploads:用于存放上传的文件。

需要创建以下两个文件:

  • index.html:Web应用程序的主页;
  • app.js:Web应用程序的入口文件。

该项目的目录结构如下所示:

file-manager/
├─ node_modules/
├─ public/
│  └─ index.html
├─ uploads/
└─ app.js

第四步:编写代码

4.1 编写index.html代码

该文件将会作为Web应用程序的主页,可以在其中编写一个简单的HTML页面,以展示上传和下载文件的功能。代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>File Manager</title>
  <style>
    body { font-family: sans-serif; }
  </style>
</head>
<body>
  <h1>File Manager</h1>

  <form method="POST" enctype="multipart/form-data" action="/upload">
    <input type="file" name="file" required>
    <br><br>
    <button type="submit">Upload</button>
  </form>

  <br><br>

  <h2>Files</h2>

  <ul id="file-list"></ul>

  <script>
    // AJAX GET request for the file list
    const xhr = new XMLHttpRequest();
    xhr.open('GET', '/files', true);
    xhr.onload = function() {
      if (xhr.status === 200) {
        const fileList = JSON.parse(xhr.responseText);
        for (const fileName of fileList) {
          const fileLink = document.createElement('a');
          fileLink.textContent = fileName;
          fileLink.href = `/download/${fileName}`;
          fileLink.target = '_blank';
          const listItem = document.createElement('li');
          listItem.appendChild(fileLink);
          document.getElementById('file-list').appendChild(listItem);
        }
      }
    };
    xhr.send();
  </script>
</body>
</html>

该文件中包含一个<form>表单,用于上传文件,以及一个<ul>列表,用于展示已上传的文件。其中,表单的enctype属性必须设置为"multipart/form-data",以支持文件上传。

该页面还包含JavaScript代码,用于通过AJAX GET请求获取已上传的文件列表,以及为每个文件创建一个下载链接。

4.2 编写app.js代码

该文件是Web应用程序的入口文件,需要在其中编写服务器端的代码。首先,需要引入expressmulter模块:

const express = require('express');
const multer = require('multer');
const mime = require('mime');

接着,需要创建一个express应用程序:

const app = express();

为了支持处理multipart/form-data类型的POST请求,需要创建一个multer实例,并配置上传文件的目录:

const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, './uploads');
  },
  filename(req, file, cb) {
    cb(null, `${file.originalname}-${Date.now()}.${mime.getExtension(file.mimetype)}`);
  }
});
const upload = multer({ storage });

其中,destination函数指定文件的上传目录,filename函数用于生成新文件的文件名(包含时间戳和文件的MIME类型后缀)。

接下来,需要创建一个POST路由,用于处理文件上传:

app.post('/upload', upload.single('file'), (req, res) => {
  res.redirect('/');
});

该路由使用upload.single()函数来处理单个文件的上传,将上传的文件保存到uploads子目录中。上传成功后,重定向到Web应用程序的主页。

还需要创建一个GET路由,用于获取上传后的文件列表:

app.get('/files', (req, res) => {
  fs.readdir('./uploads', (err, files) => {
    if (err) {
      res.status(500).send(err.message);
    } else {
      res.json(files);
    }
  });
});

该路由使用fs.readdir()函数来读取uploads子目录中的所有文件名,并返回一个JSON数组。

最后,还需要创建一个GET路由,用于下载文件:

app.get('/download/:fileName', (req, res) => {
  const filePath = `./uploads/${req.params.fileName}`;
  res.download(filePath, req.params.fileName);
});

该路由使用res.download()函数将请求的文件发送给客户端,客户端会提示是否下载该文件。

4.3 运行Web应用程序

最后,需要在命令行中运行以下命令:

node app.js

此时,Web应用程序就开启了,可以在浏览器中打开http://localhost:3000/来查看Web应用程序的主页。在该页面中,可以上传文件并查看已上传的文件,并在需要时下载这些文件。

示例说明

示例1:上传文件

在Web应用程序的主页中,点击“Choose File”按钮,选择一个文件上传,并点击“Upload”按钮。上传成功后,该文件将会出现在文件列表中。

示例2:下载文件

在Web应用程序的主页中,点击已上传文件名称后的链接,即可下载该文件。如果系统中已安装可处理该文件类型的应用程序,则该应用程序将会自动打开该文件,并在需要时提示是否下载该文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs+express实现文件上传下载管理网站 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 详解Node.js利用node-git-server快速搭建git服务器

    详解Node.js利用node-git-server快速搭建git服务器 简介 Git 是一个开源分布式版本控制系统,可以有效管理程序代码、文档等等。搭建 Git 服务器是我们经常需要做的事情。本文将介绍如何使用 Node.js 和 node-git-server 快速搭建 Git 服务器。 步骤 步骤一:安装 Node.js 首先,在你的服务器上安装 No…

    node js 2023年6月8日
    00
  • npm国内镜像 安装失败的几种解决方案

    npm国内镜像 安装失败的几种解决方案 为什么需要使用npm国内镜像? npm是一个万物皆可安装的丰富资源库,我们经常会使用npm来获取很多工具和第三方库。但是,由于我们的网络环境和国外的npm服务器环境之间距离较远,因此在下载安装npm包时可能会出现访问和网络延迟的问题,导致npm包无法下载或下载速度缓慢。为了解决这个问题,我们可以使用国内的npm镜像,加…

    node js 2023年6月8日
    00
  • nodejs个人博客开发第七步 后台登陆

    下面我将详细讲解“nodejs个人博客开发第七步 后台登陆”的完整攻略。 1. 确定需求和设计页面 在开始开发后台登录功能之前,需要先确定需求和设计登录页面。在设计登录页面时,需要考虑以下几个方面: 登录页面应该有输入账号和密码的表单,以及登录按钮。 检查用户输入的账号和密码是否合法,如果不合法,则需要提示用户重新输入。 如果用户输入的账号和密码正确,则跳转…

    node js 2023年6月8日
    00
  • pm2发布node配置文件ecosystem.json详解

    下面是pm2发布node配置文件ecosystem.json的完整攻略: 概述 PM2是一个流程管理工具,它可以帮助我们管理运行在服务器上的Node.js应用程序。通过使用PM2,我们可以轻松地启动、停止、重启、添加和监视应用程序。为了方便管理,可以将应用程序的配置文件编写成一个名为ecosystem.json的JSON文件,以描述应用程序的基本信息。 步骤…

    node js 2023年6月8日
    00
  • 浅谈node的事件机制

    浅谈 Node 的事件机制 1. Node.js 事件机制简介 Node.js 的事件机制是基于观察者模式实现的,包含两个主要部分:事件的触发器(EventEmitter)和事件的监听器(Listener)。 其中 EventEmitter 是具有发布-订阅(publish-subscribe)模式功能的对象,用来触发事件和传递数据,而 Listener 则…

    node js 2023年6月8日
    00
  • nodejs express实现中间件

    Node.js Express 是一个常用的 Web 应用程序框架,其灵活的中间件机制是其处理请求和响应的核心机制。中间件是一个函数,位于 HTTP 请求和响应处理管道中,可以进行类似于预处理请求、重写响应等任务。 要实现中间件,需要遵循以下步骤: 创建中间件函数: 中间件函数是一个形如 (req, res, next) => {} 的函数,其中 re…

    node js 2023年6月8日
    00
  • 不同js异步函数同步的实现方法

    完整攻略: 异步和同步的概念 在 JavaScript 中,异步和同步操作涉及到不同的编程模式。同步编程模式只会在一个代码块执行完毕之后才会开始下一个代码块的执行,而异步编程模式可以使代码在同一时间执行多个不同的代码块。 Promise Promise 是一个 JavaScript 内置的对象,它可以简化异步编程中的回调嵌套,使代码更清晰易懂。 Promis…

    node js 2023年6月8日
    00
  • 分析node事件循环和消息队列

    分析Node事件循环和消息队列 什么是Node事件循环和消息队列 Node.js是一种基于事件驱动和异步I/O模型的JavaScript运行时环境。在Node.js中,事件循环和消息队列是实现异步事件处理的重要组成部分。 事件循环是 Node.js 的核心,它负责在主线程中不断地轮询队列,查看是否有新的事件需要处理。 消息队列是用来存放事件回调函数的队列,当…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部