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

yizhihongxing

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

  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日

相关文章

  • nodejs实现百度舆情接口应用示例

    为了讲解“nodejs实现百度舆情接口应用示例”的完整攻略,我们需要先了解以下几个内容: 什么是Node.js 什么是百度舆情接口 如何使用Node.js实现百度舆情接口应用示例 1. 什么是Node.js Node.js是一个基于Chrome V8引擎的JavaScript运行环境,其主要用于快速、轻松地构建高性能、可伸缩的网络应用程序。在Node.js环…

    node js 2023年6月8日
    00
  • node.js文件的复制、创建文件夹等相关操作

    下面是node.js文件的复制、创建文件夹等相关操作的完整攻略: 文件复制 在Node.js中,文件复制可以使用fs模块的copyFile()方法。其基本语法如下: fs.copyFile(srcPath, destPath, (err) => { if (err) throw err; console.log(‘File was copied’); …

    node js 2023年6月8日
    00
  • Node.js获取本机Mac地址的两种方案

    首先我们来讲解一下如何获取本机Mac地址的两种方案。 方案一:使用Node.js内置的OS模块 Node.js内置的OS模块提供了获取本机Mac地址的方法,具体实现如下: const os = require(‘os’); const macAddress = () => { const networkInterfaces = os.networkIn…

    node js 2023年6月8日
    00
  • LRU算法在Vue内置组件keep-alive中的使用

    LRU算法是最近最少使用算法,是一种内存管理方式。Vue.js框架内置的keep-alive组件就是使用LRU算法来管理缓存的。下面详细讲解LRU算法在Vue内置组件keep-alive中的使用攻略。 1、什么是keep-alive? keep-alive是Vue.js内置的一个组件,可以使被包含的组件保留状态,避免多次渲染。也就是说,使用keep-aliv…

    node js 2023年6月8日
    00
  • 代码规范需要防微杜渐code review6个小错误纠正

    下面我将详细讲解“代码规范需要防微杜渐code review6个小错误纠正”的完整攻略。 1. 概述 代码规范是指开发者在编码时需要遵循的一些约定,如变量命名、代码格式、注释规范等。良好的代码规范可以提高代码的可读性、可维护性和可扩展性。而code review(代码审核)则是指对开发人员提交的代码进行仔细的检查和审查,以便发现和纠正代码中的问题和错误。 在…

    node js 2023年6月8日
    00
  • Lua中的变量和流控制入门学习

    Lua中的变量和流控制是学习该语言的重要部分,本篇攻略将带您深入了解它们。 变量 声明变量 在Lua中,变量的命名使用字母、数字和下划线的组合,且不能以数字开头。定义变量时,无需指定数据类型,Lua会根据值自动判断类型。变量的声明与赋值可以同时进行,语法如下: variable = value 变量类型 Lua中常用的数据类型有数字、字符串、布尔值、nil以…

    node js 2023年6月8日
    00
  • WebStorm ES6 语法支持设置&babel使用及自动编译(详解)

    WebStorm ES6 语法支持设置 & Babel 使用及自动编译 (详解) WebStorm 是目前市面上最为流行的前端开发 IDE 之一,同时也支持 ES6 语法的开发,本文将详细讲解 WebStorm 如何设置 ES6 语法支持和使用 Babel 自动编译。 设置 WebStorm ES6 语法支持 在 WebStorm 中开启 ES6 语…

    node js 2023年6月8日
    00
  • Node.js实现数据推送

    接下来我将详细讲解“Node.js实现数据推送”的完整攻略,包括以下内容: 实现数据推送的基本原理 使用Node.js实现数据推送的步骤 两条示例说明 1. 实现数据推送的基本原理 在Web应用中,数据推送是指服务器向客户端主动发送数据更新通知的一种实现方式。实现数据推送的基本原理就是通过长连接(如WebSocket)实时得到数据更新并进行页面渲染。 2. …

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