nodejs multer实现文件上传与下载

首先我们需要了解一下什么是Multer。Multer是一个node.js中间件,用于处理multipart/form-data类型的表单数据,主要用于上传文件。在node.js中,文件上传非常容易实现,但是处理文件上传时需要对文件进行验证,以确保上传的文件符合我们的需求。这就是Multer的作用所在。

安装Multer

我们可以通过npm来安装Multer,执行下面的代码即可:

npm install multer

Multer的使用

单文件上传

先看一个实现单文件上传的例子:

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

// 确定上传文件的存储路径和文件名称
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, '../uploads')
    },
    filename: (req, file, cb) => {
        cb(null, Date.now() + '-' + file.originalname)
    }
});

// 创建Multer实例
const upload = multer({ storage });

// 处理上传的文件
app.post('/upload', upload.single('file'), (req, res) => {
    // 文件上传成功,返回上传结果
    res.send({
        message: '上传成功',
        filename: req.file.filename,
        size: req.file.size
    });
});

// 启动服务器
app.listen(8000, () => {
    console.log('Server start on port 8000');
});

在上面的代码中,我们首先使用storage对象定义了文件上传时存储的路径和文件名。然后创建了Multer实例,并将storage对象作为参数传入Multer构造函数中。

在Multer实例创建完成之后,我们通过upload.single()方法指定上传的文件类型为单个文件(即上传一个文件),同时指定上传文件的参数名称为file

接着在使用app.post()方法定义请求方法和路由之后,我们在回调函数中通过req.file获取上传的文件信息,并返回上传结果。

最后启动HTTP服务器,就可以使用上面代码实现上传单个文件功能。

多文件上传

下面是实现多文件上传的代码示例:

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

// 定义上传文件的存储路径和文件名称
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, '../uploads')
    },
    filename: (req, file, cb) => {
        cb(null, Date.now() + '-' + file.originalname)
    }
});

// 创建Multer实例
const upload = multer({ storage });

// 处理上传的文件,指定上传的文件类型为多个文件
app.post('/upload', upload.array('files', 10), (req, res) => {
    // 文件上传成功,返回上传结果
    res.send({
        message: '上传成功',
        files: req.files.map(file => ({
            filename: file.originalname,
            size: file.size
        }))
    });
});

// 启动HTTP服务器
app.listen(8000, () => {
    console.log('Server start on port 8000');
});

在上面的代码中,我们使用upload.array()方法指定上传的文件类型为多个文件,同时指定上传文件的参数名称为files

在Multer完成文件上传之后,我们可以通过req.files获取上传的所有文件信息,并返回上传结果。

文件下载

文件上传之后,一般需要提供文件下载的服务。实现文件下载非常简单,只需要修改服务器端的请求处理即可。

const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();

// 处理文件下载请求
app.get('/download/:file', (req, res) => {
    const file = path.join('../uploads', req.params.file);

    // 判断要下载的文件是否存在
    if (!fs.existsSync(file)) {
        res.status(404).send('File not found');
        return;
    }

    // 设置响应头,告诉客户端要下载的文件信息
    res.set({
        'Content-Type': 'application/octet-stream',
        'Content-Disposition': `attachment; filename=${encodeURI(req.params.file)}`
    })

    // 使用流式方式读取文件,并将文件内容写入响应流
    const stream = fs.createReadStream(file);
    stream.pipe(res);
});

// 启动HTTP服务器
app.listen(8000, () => {
    console.log('Server start on port 8000');
});

在上面的代码中,我们通过app.get()方法定义了一个文件下载的API。在处理文件下载请求之前,我们首先要判断要下载的文件是否存在。

如果要下载的文件不存在,则返回404错误。

如果要下载的文件存在,则设置响应头信息,告诉客户端要下载的文件类型和名称。然后使用流式方式读取文件内容,将文件内容写入响应流中,最终实现文件下载功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs multer实现文件上传与下载 - Python技术站

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

相关文章

  • 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
  • nodejs提示:cross-device link not permitted, rename错误的解决方法

    当使用Node.js在一个目录内复制文件时,可能会遇到cross-device link not permitted或rename错误,这是因为Node.js尝试将文件从一个设备链接到另一个设备。本攻略将详细介绍如何解决这个问题。 解决方法 为了解决这个问题,我们需要使用Node.js的文件系统模块fs中的createReadStream和createWri…

    node js 2023年6月8日
    00
  • Nest.js 授权验证的方法示例

    让我来给您详细讲解关于 “Nest.js 授权验证的方法示例” 的完整攻略。 标准安装 首先,需要使用 npm 安装 nestjs 官方授权验证库: npm i @nestjs/passport @nestjs/jwt passport-jwt 安装了该插件后,我们还需要为它配置启用策略和秘钥等信息。例如: // auth.module.ts import …

    node js 2023年6月8日
    00
  • 解决使用node命令提示:’node’不是内部或外部命令,也不是可运行的程序

    如果在使用node命令时,出现提示”node不是内部或外部命令、也不是可运行的程序”,通常是由于Node.js环境没有正确配置导致的。本文将提供一份完整攻略,来解决这个问题。 什么是Node.js 首先,简单介绍一下Node.js。Node.js是一个基于Chrome浏览器V8引擎的JavaScript运行环境,它允许开发人员使用JavaScript编写服务…

    node js 2023年6月8日
    00
  • 使用nodejs + koa + typescript 集成和自动重启的问题

    要使用nodejs + koa + typescript集成以及自动重启,需要使用以下几个工具和库: Node.js:运行环境 TypeScript:用于编写类型安全的JavaScript代码 Koa:一个轻量级的Node.js框架,用于构建Web应用程序 nodemon:用于监视文件更改并自动重新启动应用程序 ts-node:帮助我们直接运行TypeScr…

    node js 2023年6月8日
    00
  • nodejs中实现用户注册路由功能

    实现用户注册路由功能是Web应用程序的基本功能之一。在Node.js中,需要使用一些模块和库来帮助实现这个功能,下面将为您提供实现用户注册路由功能的完整攻略: 使用Express框架 在Node.js中,我们常用的Web开发框架是Express。使用Express框架可以让我们更快速、更高效地开发Web应用程序。下面是一个简单的Express路由示例: co…

    node js 2023年6月8日
    00
  • nodejs导出excel的方法

    下面是“Node.js导出Excel的方法”的完整攻略: 1. 安装依赖包 在Node.js中,我们可以使用exceljs模块来实现导出Excel文件的功能。因此,需要先使用npm安装该模块: npm install exceljs –save 2. 创建Excel文件并添加数据 安装完成后,我们可以在代码中引入该模块,创建一个Workbook对象,然后在…

    node js 2023年6月8日
    00
  • Vue中引入swiper报错的问题及解决

    当我们在Vue中引入Swiper时,有时会遇到一些报错问题,下面我将详细讲解这些问题及其解决方法。 问题1:’$’未定义 当我们在Vue中引入Swiper时,如果出现’$’未定义的报错,这是因为jQuery和Swiper的标识符会出现冲突,使用以下方法可以解决: 在项目中安装jquery: npm install jquery –save 在main.js…

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