使用nodejs+express实现简单的文件上传功能

实现一个简单的文件上传功能主要分为三个步骤:

  1. 创建上传表单
  2. 配置express路由
  3. 处理上传文件

下面逐步介绍实现方法。

  1. 创建上传表单

前端代码:

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="上传">
</form>

这里的enctype属性必须设置为"multipart/form-data",否则无法上传文件。

  1. 配置express路由

后端代码:

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

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    const extension = file.originalname.split('.').pop();
    cb(null, file.fieldname + '-' + Date.now() + '.' + extension)
  }
});

const upload = multer({ storage });

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('上传成功');
});

app.listen(3000, () => {
  console.log('服务器启动成功');
});

multer是一个nodejs的上传中间件,用于处理文件上传的功能。在这个例子中,我们定义了一个storage对象来指定上传文件的存储地址和文件名。上传的文件将保存在项目根目录下的uploads文件夹中。

使用upload.single('file')来接受上传的文件,其中'file'是上传表单中input[type="file"]的name属性。

  1. 处理上传文件

通过实际示例来说明如何处理上传的文件,以下是一个简单的上传图片的例子。

前端代码:

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="image">
  <input type="submit" value="上传">
</form>

后端代码:

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

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    const extension = file.originalname.split('.').pop();
    cb(null, file.fieldname + '-' + Date.now() + '.' + extension)
  }
});

const upload = multer({ storage });

app.get('/', (req, res) => {
  res.send(`
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="image">
      <input type="submit" value="上传图片">
    </form>
  `);
});

app.post('/upload', upload.single('image'), (req, res) => {
  res.send(`
    <h1>上传成功</h1>
    <img src="/${req.file.path}" />
  `);
});

app.listen(3000, () => {
  console.log('服务器启动成功');
});

这个例子中我们上传了一张图片,并在上传成功后返回给前端一个img标签,显示刚刚上传的图片。其中${req.file.path}表示文件路径,通过src属性来显示图片。

除了单个文件上传,还可以使用upload.array()或upload.fields()来批量上传或指定上传字段。

示例说明:

假设现在我们需要实现一个上传多个文件的功能,前端代码如下:

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="images" multiple>
  <input type="submit" value="上传">
</form>

后端代码如下:

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

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    const extension = file.originalname.split('.').pop();
    cb(null, file.fieldname + '-' + Date.now() + '.' + extension)
  }
});

const upload = multer({ storage });

app.get('/', (req, res) => {
  res.send(`
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="images" multiple>
      <input type="submit" value="上传图片">
    </form>
  `);
});

app.post('/upload', upload.array('images'), (req, res) => {
  res.send(`
    <h1>上传成功</h1>
    ${req.files.map(file => `<img src="/${file.path}" />`).join('')}
  `);
});

app.listen(3000, () => {
  console.log('服务器启动成功');
});

与上传单个文件的例子类似,只需要使用upload.array()来处理上传的多个文件,其中'images'表示上传表单中input[type="file"]的name属性。在上传成功后,我们通过map方法将所有上传的图片都显示出来,使用.join()方法将数组连接为一个字符串渲染到前端页面中。

以上就是使用nodejs+express实现简单的文件上传功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用nodejs+express实现简单的文件上传功能 - Python技术站

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

相关文章

  • 14款NodeJS Web框架推荐

    14款NodeJS Web框架推荐的完整攻略 Node.js是一种流行的服务器端JavaScript运行时环境,为开发者提供了一种快速构建高性能Web应用程序的工具。在Node.js中,有许多Web框架可供选择,以帮助开发者构建灵活、可扩展的Web应用程序。以下是14款NodeJS Web框架的推荐,其中包括: 1. Express Express是其中一款…

    node js 2023年6月8日
    00
  • Vue.js项目部署到服务器的详细步骤

    下面来详细讲解“Vue.js项目部署到服务器的详细步骤”。 1. 前置条件 在进行 Vue.js 项目部署之前,需要在服务器上安装 Node.js 和 Git 工具。如果你的服务器已经安装过了,那么可以跳过此步骤。 安装 Node.js: # 安装 Node.js sudo apt-get update sudo apt-get install nodejs…

    node js 2023年6月8日
    00
  • node安装及环境变量配置详细教程

    Node安装及环境变量配置详细教程 1. 下载Node.js安装包 访问Node.js 的官方网站,选择适合自己系统版本的Node.js安装包,一般来说可能有LTS和Current两个版本可供下载。建议选择LTS版本,因为这个版本的稳定性更高,适合用于生产环境,而Current版本可能包含了一些最新的特性,但是由于还没有经过足够的测试,可能存在一些问题。 2…

    node js 2023年6月8日
    00
  • Node.js基于cors解决接口跨域的问题(推荐)

    Node.js 是一个基于 JavaScript 运行的平台,可用于构建高性能、可伸缩的 Web 应用程序。在使用 Node.js 构建 Web 应用程序时,经常需要解决跨域请求的问题。本文将介绍如何在 Node.js 环境下使用 CORS 库来解决接口跨域的问题。 什么是跨域请求? 跨域请求是指在浏览器中通过 AJAX(Asynchronous JavaS…

    node js 2023年6月8日
    00
  • Node.js:模块查找,引用及缓存机制详解

    下面为您详细讲解“Node.js:模块查找,引用及缓存机制详解”的完整攻略。 Node.js:模块查找、引用及缓存机制详解 模块查找 在 Node.js 中,require 方法用于加载模块。当加载一个模块时,Node.js 需要使用一定的规则来查找该模块,这些规则将在下面详细解释。 核心模块 当加载一个核心模块时,Node.js 会优先从内置的核心模块列表…

    node js 2023年6月8日
    00
  • npm start运行项目过程package.json字段详解

    下面我来详细讲解如何理解和使用 npm start 命令来启动项目,并深入剖析 package.json 文件中的相关字段。 什么是npm start命令? 在使用 npm 来管理Node.js项目时,我们经常会用到 npm start 命令来启动项目。它的作用实际上就是通过执行 package.json 文件中 “scripts” 对象中的 “start”…

    node js 2023年6月8日
    00
  • Node.js卸载与重装及zip与msi安装详解

    Node.js卸载与重装及zip与msi安装详解 当我们需要重新安装或升级Node.js时,有三个主要的安装方式可以选择,分别是zip包、msi文件和macOS PKG文件。同时,为确保重新安装或升级能成功进行,我们可能需要卸载原有的Node.js版本。 卸载Node.js Windows系统下的卸载 对于Windows系统,卸载Node.js的主要步骤有:…

    node js 2023年6月8日
    00
  • node实现分片下载的示例代码

    接下来我会为你讲解”node实现分片下载的示例代码”的完整攻略。 分片下载介绍 当我们下载一个大文件时,往往由于网络传输的不稳定性,很容易出现下载错误、中断等问题。为了提高文件下载的效率和稳定性,我们可以使用分片下载的方式。所谓分片下载,就是将一个大文件拆分成多个小文件,分别下载,最后再合并成一个完整的文件。这样做不仅能够减少文件下载错误和中断的概率,而且还…

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