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中的path路径模块

    节点(Node.js)的path模块提供了一些有用的函数来管理文件路径。 在本攻略中,我们将讨论这个模块的一些常用函数,以及如何使用它们解析文件路径。 获取文件名 使用path模块可以方便地解析文件名,例如,path.basename()函数可以从文件路径中提取文件名。 const path = require(‘path’); console.log(pa…

    node js 2023年6月8日
    00
  • 关于node编写文件上传的接口的坑及解决

    当使用Node.js编写文件上传的接口时,可能会遇到以下坑点: 对于大文件上传,内存可能会不足,导致服务器崩溃。因此,需要使用流的方式读取上传文件,而不是将整个文件直接读取到内存中。 在多个文件同时上传或者文件较大时,可能会导致上传速度变慢或者上传过程中出现错误。这个坑点可以通过对上传进度进行监控和限制上传速度来解决。 针对这些坑点,下面是详细的解决方案: …

    node js 2023年6月8日
    00
  • Node.js实现JS文件合并小工具

    Node.js实现JS文件合并小工具的完整攻略如下: 什么是Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使 JavaScript 可以脱离浏览器环境独立运行在服务器端,并且可以通过命令行进行操作。 实现JS文件合并小工具 第一步:安装Node.js 在官网下载对应操作系统版本的Node.js,安装完…

    node js 2023年6月8日
    00
  • 解析NodeJs的调试方法

    下面是关于解析 Node.js 的调试方法的完整攻略。 入门 在开始调试之前,需要先清楚地了解 Node.js 的调试原理。简单地说,Node.js 的调试是通过在程序启动时指定 –inspect 参数来启用的。这将会使 Node.js 进程与 Chrome DevTools 建立起一个调试通道,通过这个通道可以实时地调试代码。 要调试 Node.js 应…

    node js 2023年6月7日
    00
  • 使用ThinkJs搭建微信中控服务的实现方法

    使用ThinkJs搭建微信中控服务的实现方法 ThinkJs是一个快速、简单而又强大的Node.js框架,使用它可以很快地搭建Web应用。本攻略将介绍如何使用ThinkJs来搭建微信中控服务,包括对接微信公众号服务器、处理微信公众号消息等。 创建项目 首先,我们需要安装ThinkJs,可以通过npm来安装: npm install -g think-cli …

    node js 2023年6月8日
    00
  • nodejs实例解析(输出hello world)

    Node.js是基于Chrome V8引擎开发的运行在服务器端的JavaScript运行环境,提供了一种轻量级、高效、可扩展的方式来搭建网络应用程序。下面是如何使用Node.js输出“hello world”的攻略。 准备工作 在开始之前,请确保已经安装了Node.js。可以在命令行中输入以下命令检查是否已经安装: node -v 如果已经安装,则会输出安装…

    node js 2023年6月8日
    00
  • 用nodeJS搭建本地文件服务器的几种方法小结

    我非常乐意为您提供关于用NodeJS搭建本地文件服务器的几种方法小结的完整攻略。 用NodeJS搭建本地文件服务器的几种方法小结 基于Node.js的http模块搭建文件服务器 首先,安装Node.js并检查是否成功安装,可以通过在终端或命令提示符中输入命令node -v来查看版本号。 在文件系统中选择一个文件夹作为服务器根目录,应确保Node.js具有访问…

    node js 2023年6月8日
    00
  • Node后端Express框架安装及应用

    安装Express框架: 1.首先需要安装Node.js,可以前往Node.js官网下载相应版本的安装包并完成安装。 2.打开命令行工具,输入以下命令安装Express框架: npm install express –save 其中,–save选项将安装的内容添加进package.json文件中,方便后续依赖管理。 3.在项目目录下创建app.js文件,…

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