Node.js + express实现上传大文件的方法分析【图片、文本文件】

yizhihongxing

下面我将为你详细讲解“Node.js + express实现上传大文件的方法分析【图片、文本文件】”的完整攻略。

一、背景介绍

在web开发中,经常会需要上传大文件,例如图片、文本文件等,Node.js提供了处理文件上传的模块,其中最常用的就是multer中间件。multer中间件可以让我们轻松处理上传文件时产生的数据,同时也支持客户端上传多个文件。下面我将为你介绍在Node.js使用express和multer中间件实现上传大文件的方法。

二、准备工作

  1. 安装Node.js和express
  2. 在项目中安装multer和body-parser中间件,可以通过命令npm install multer body-parser --save来安装

三、实现流程

下面是实现上传大文件的具体步骤。

3.1. 引入中间件

在代码中引入express、multer和body-parser三个中间件。

const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')
const app = express()

3.2. 设置上传文件的临时目录和文件名设置

在代码中设置上传文件的临时目录和文件名设置,这里我将上传的文件存储在项目根目录下的uploads文件夹中。

// 上传文件的存储配置
var storage = multer.diskStorage({
    // 上传文件保存的目录,如果目录不存在会自动创建
    destination: function (req, file, cb) {
        cb(null, './uploads/')
    },
    // 上传文件的文件名
    filename: function (req, file, cb) {
        var changedName = (new Date().getTime()) + '-' + file.originalname;
        cb(null, changedName)
    }
});

3.3. 设置上传文件的限制条件

在代码中设置上传文件的大小和类型限制条件。

//上传文件大小限制
var limits = {
    fileSize: 1024 * 1024 * 10
}

//上传文件类型限制
var fileFilter = function (req, file, cb) {
    if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg' || file.mimetype === 'text/plain' || file.mimetype === 'application/pdf') {
        return cb(null, true)
    }
    cb(null, false)
}

3.4. 设置路由和接口

在代码中设置路由和接口,用于接收客户端上传的文件并存储。

//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
    var file = req.file;
    if (!file) {
        res.json({
            code: 404,
            msg: '上传失败,未选择文件!'
        })
        return;
    } else {
        res.json({
            code: 200,
            data: {
                filename: file.filename,
                path: 'http://localhost:3000/' + file.path
            },
            msg: '上传成功!'
        })
        return;
    }
})

3.5. 启动服务

在代码中启动服务,监听3000端口。

app.listen(3000, () => {
    console.log('server is running on port 3000')
})

到这里,Node.js + express实现上传大文件的方法便已经讲解完毕了。下面我将通过两个示例来说明如何在具体项目中实现上传大文件的方法。

示例1:上传图片文件

以下是使用Node.js + express实现上传图片文件的具体代码:

const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')

const app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

//上传文件的存储配置
var storage = multer.diskStorage({
    //上传文件保存的目录,如果目录不存在会自动创建
    destination: function (req, file, cb) {
        cb(null, './uploads/')
    },
    //上传文件的文件名
    filename: function (req, file, cb) {
        var changedName = (new Date().getTime()) + '-' + file.originalname;
        cb(null, changedName)
    }
});

//限制上传文件大小和类型
var limits = {
    fileSize: 1024 * 1024 * 5
}
var fileFilter = function (req, file, cb) {
    if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg') {
        return cb(null, true)
    }
    cb(null, false)
}

//上传文件初始化
var upload = multer({
    storage: storage,
    limits: limits,
    fileFilter: fileFilter
});

//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
  var file = req.file;
  if (!file) {
    res.json({
      code: 404,
      msg: '上传失败,未选择文件!'
    })
    return;
  } else {
    res.json({
      code: 200,
      data: {
        filename: file.filename,
        path: 'http://localhost:3000/' + file.path
      },
      msg: '上传成功!'
    })
    return;
  }
})

//启动服务
app.listen(3000, () => {
  console.log('server is running on port 3000')
})

在客户端上传图片文件时,只需要发送一个POST请求,请求的URL为http://localhost:3000/upload,请求的Body中需要包含文件,文件的FormData格式如下:

<form enctype="multipart/form-data" method="post">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

示例2:上传文本文件

以下是使用Node.js + express实现上传文本文件的具体代码:

const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')

const app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

//上传文件的存储配置
var storage = multer.diskStorage({
    //上传文件保存的目录,如果目录不存在会自动创建
    destination: function (req, file, cb) {
        cb(null, './uploads/')
    },
    //上传文件的文件名
    filename: function (req, file, cb) {
        var changedName = (new Date().getTime()) + '-' + file.originalname;
        cb(null, changedName)
    }
});

//限制上传文件大小和类型
var limits = {
    fileSize: 1024 * 1024 * 5
}
var fileFilter = function (req, file, cb) {
    if (file.mimetype === 'text/plain' || file.mimetype === 'application/pdf') {
        return cb(null, true)
    }
    cb(null, false)
}

//上传文件初始化
var upload = multer({
    storage: storage,
    limits: limits,
    fileFilter: fileFilter
});

//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
  var file = req.file;
  if (!file) {
    res.json({
      code: 404,
      msg: '上传失败,未选择文件!'
    })
    return;
  } else {
    res.json({
      code: 200,
      data: {
        filename: file.filename,
        path: 'http://localhost:3000/' + file.path
      },
      msg: '上传成功!'
    })
    return;
  }
})

//启动服务
app.listen(3000, () => {
  console.log('server is running on port 3000')
})

在客户端上传文本文件时,只需要发送一个POST请求,请求的URL为http://localhost:3000/upload,请求的Body中需要包含文件,文件的FormData格式如下:

<form enctype="multipart/form-data" method="post">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

以上就是使用Node.js + express实现上传大文件的方法分析,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js + express实现上传大文件的方法分析【图片、文本文件】 - Python技术站

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

相关文章

  • Node.js安装教程和NPM包管理器使用详解

    Node.js安装教程和NPM包管理器使用详解 1. 安装Node.js 在浏览器中打开Node.js的官网 https://nodejs.org/, 页面会自动检测你的操作系统。选择你需要的安装包,如果是64位Windows系统则选择Windows Installer (.msi) 64-bit版本进行下载,如果是Mac系统则选择.pkg或.dmg版本进行…

    node js 2023年6月8日
    00
  • node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)

    下面是详细的攻略: 准备工作 在进行下一步操作前,请确保你已经安装好了以下软件: Node.js MySQL数据库 同时,在项目目录下创建一个 .env 文件,用于存储私密信息。文件格式如下: PORT=3000 SECRET=your_secret_key DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PAS…

    node js 2023年6月8日
    00
  • js在指定位置增加节点函数insertBefore()用法实例

    js在指定位置增加节点函数insertBefore()用法实例 什么是insertBefore()函数 insertBefore()函数是DOM操作中常用的一种方法,它可以在某个元素的子节点列表中插入一个新的子节点。它需要两个参数,第一个是要插入的新节点,第二个是已存在的节点,新节点将插入到现有节点的前面。 parentElement.insertBefor…

    node js 2023年6月8日
    00
  • Node.js连接mongo数据库上传文件的方法步骤

    下面是“Node.js连接mongo数据库上传文件的方法步骤”的完整攻略: 1. 安装依赖 在Node.js中连接mongo数据库,需要使用到mongoose,参考以下命令进行安装: npm install mongoose 同时,也需要使用到multer,参考以下命令进行安装: npm install multer 2. 连接MongoDB数据库 使用mo…

    node js 2023年6月8日
    00
  • node.js中的fs.lstat方法使用说明

    下面是“node.js中的fs.lstat方法使用说明”的完整攻略。 目录 什么是fs.lstat方法? 如何使用fs.lstat方法? fs.lstat方法的示例 示例一:获取文件的类型 示例二:遍历文件夹 什么是fs.lstat方法? fs.lstat() 方法用于获取指定路径文件或目录的相关信息,包括文件类型、大小、权限等信息。与 fs.stat() …

    node js 2023年6月8日
    00
  • node连接mysql查询事务处理的实现

    在实现 Node.js 连接 MySQL 数据库的过程中,事务处理是一个非常重要的内容。通过使用事务,可以保证一组 SQL 操作的原子性以及一致性。下面是基本的实现步骤: 1.安装 MySQL 模块 npm install mysql –save 2.导入 mysql 模块 const mysql = require(‘mysql’); 3.连接 MySQ…

    node js 2023年6月8日
    00
  • 一组JS创建和操作表格的函数集合

    一、创建表格的函数 createTable(rows, cols, containerId) 创建一个 rows 行和 cols 列的表格,并将其插入到指定容器中。 代码块示例: function createTable(rows, cols, containerId) { let container = document.getElementById(co…

    node js 2023年6月8日
    00
  • 你应该知道的几类npm依赖包管理详解

    你应该知道的几类npm依赖包管理详解 1. devDependencies devDependencies 是一个特殊的依赖包,他们仅在开发时依赖使用。也就是说,这些依赖包只在构建/编译/测试/调试时使用。在安装的时候,使用 npm install –only=dev 安装,或使用 npm install <package> –save-de…

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