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日

相关文章

  • JavaScript前端构建工具原理的理解

    JavaScript前端构建工具是指能够自动进行前端开发过程的工具。它们可以自动生成、优化和修改前端代码和资源,以提高开发效率、代码质量和应用性能。常见的前端构建工具包括Webpack、Grunt和Gulp等。 以下是JavaScript前端构建工具原理的理解: 工作原理 前端构建工具的工作原理主要包括以下四个步骤: 读取和解析配置文件:前端构建工具需要读取…

    node js 2023年6月9日
    00
  • Node.js中的Buffer对象及创建方式

    当需要在 Node.js 中处理二进制数据时,我们可以使用 Buffer 对象。Buffer 是 Node.js 的一个核心模块,通过它可以创建和操作二进制数据。 创建 Buffer 在 Node.js 中,可以使用以下几种方式来创建 Buffer 对象: 通过长度创建 Buffer 可以通过指定 Buffer 的长度来创建 Buffer 对象。例如: co…

    node js 2023年6月8日
    00
  • Node.js使用第三方插件nodemailer实现邮件发送示例

    下面是详细讲解“Node.js使用第三方插件nodemailer实现邮件发送示例”的完整攻略。 一、介绍nodemailer插件 nodemailer是一个用于发送E-mail的Node.js插件,它支持各种传输方式(SMTP,Sendmail,Direct等),可以非常方便地实现邮件的发送。 二、安装nodemailer插件 在使用nodemailer插件…

    node js 2023年6月8日
    00
  • NodeJS制作爬虫全过程

    NodeJS制作爬虫全过程 在 NodeJS 中,可以使用第三方库 axios 和 cheerio 来制作爬虫。以下是 NodeJS 制作爬虫的完整攻略: 安装 axios 和 cheerio 首先需要在项目中安装 axios 和 cheerio 这两个库。可以通过以下命令在控制台中安装这两个库: npm install axios cheerio 获取网页…

    node js 2023年6月8日
    00
  • 关于node.js版本npm -v报错问题的解决方法

    当在命令行中输入npm -v命令时,如果出现报错(如“‘npm’不是内部或外部命令,也不是可运行的程序”),这通常表示您没有正确安装或配置Node.js。 以下是解决此问题的一些步骤: 确认您已正确安装Node.js 在命令行中输入node -v,确保您已成功安装Node.js,并已添加到系统的PATH环境变量中。如果未成功安装,请参考安装文档进行安装:ht…

    node js 2023年6月8日
    00
  • JavaScript中Map与Object应用场景

    在JavaScript中,Map与Object都可以用于存储键/值对,但是它们在应用场景上的区别较大。 Map 什么是Map Map是一种新的数据结构,它于ES6(ECMAScript 2015)中被引入,主要用于存储键/值对,并且键和值可以是任意类型。它提供了以下主要方法: set(key, value) :向Map对象中添加或更新一个键值对。 get(k…

    node js 2023年6月8日
    00
  • nodeJs链接Mysql做增删改查的简单操作

    下面我将为你详细讲解如何使用Node.js链接MySQL进行简单的增删改查操作。首先,我们需要安装mysql模块以及mysql客户端。 简单安装方法: 使用npm安装mysql模块 npm install mysql 下载并安装mysql客户端 官网下载链接:https://dev.mysql.com/downloads/mysql/ 安装完后,我们需要在N…

    node js 2023年6月8日
    00
  • node.js解决获取图片真实文件类型的问题

    问题描述: 在web开发中,我们经常需要获取上传的图片的真实文件类型。然而在文件上传时,由于http协议并不会对上传的文件做校验,因此恶意用户可以通过修改扩展名绕过我们文件类型校验的功能。 解决方案: 在node.js中使用第三方库image-size可以轻松地解决获取图片真实文件类型的问题。 image-size库的作用是读取图片文件的头部信息,通过解析这…

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