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日

相关文章

  • javascript 进阶篇2 CSS XML学习

    Javascript 进阶篇2 CSS XML 学习攻略 1. 学习 CSS CSS(Cascading Style Sheets)是一种用于描述网页布局和样式的语言。在学习 CSS 之前,先要了解 HTML 的基础知识,因为 CSS 主要是用来修饰 HTML 的。 以下是学习 CSS 的步骤: 学习 CSS 的基本语法 selector { propert…

    node js 2023年6月8日
    00
  • 探索node之事件循环的实现

    下面我将详细讲解“探索node之事件循环的实现”的攻略。 什么是事件循环? 事件循环是一种异步编程模型,用于处理与用户交互相关的操作。在事件循环中,应用程序通过事件驱动的方式响应和处理事件。事件循环的主要步骤是: 等待事件: 事件循环会处理用户事件(如鼠标点击,键盘输入等)和系统事件(如文件读写,网络操作等)。 执行回调: 当某个事件触发时,事件循环会执行与…

    node js 2023年6月8日
    00
  • Nodejs 模块化实现示例深入探究

    首先需要明确一下什么是 Node.js 的模块化。 在 Node.js 中,每个文件就是一个模块,模块是独立的,可以被其他模块引用和调用。同时,Node.js 还支持将多个模块组成一个完整的功能,这就是模块化。 Node.js 中常用的模块化方案有两种,分别是 CommonJS 和 ES6 模块化。其中,CommonJS 是 Node.js 原生支持的模块化…

    node js 2023年6月8日
    00
  • nodejs中简单实现Javascript Promise机制的实例

    下面是“nodejs中简单实现JavaScript Promise机制的实例”的完整攻略。 Promise机制简介 Promise是一种异步编程模型,它可以让我们更加优雅地处理异步的操作,避免回调函数嵌套带来的代码臃肿和难以维护的问题。 Promise有三种状态: pending(进行中) fulfilled(已成功) rejected(已失败) Promi…

    node js 2023年6月8日
    00
  • 用NodeJS实现批量查询地理位置的经纬度接口

    实现批量查询地理位置的经纬度接口,可以通过使用NodeJS中的geocoder包实现。geocoder可以将地理位置信息转化为经纬度,并且支持批量查询。下面是实现的详细攻略: 1. 安装geocoder包 可以通过npm install命令安装geocoder包,具体如下: npm install geocoder 2. 引入geocoder包 在NodeJ…

    node js 2023年6月8日
    00
  • JavaScript前端构建工具原理的理解

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

    node js 2023年6月9日
    00
  • node 标准输入流和输出流代码实例

    下面是node标准输入流和输出流的详细讲解和代码实例攻略: 1. 标准输入流 标准输入流是指程序从控制台获取输入的数据流,通常使用process.stdin来读取。下面我们通过一个示例说明如何使用标准输入流来获取用户输入的数据: // 读取输入 process.stdin.resume(); process.stdin.setEncoding(‘utf8’)…

    node js 2023年6月8日
    00
  • 详解Vue.js使用Swiper.js在iOS<11时出现错误

    当我们在使用Vue.js框架结合Swiper.js插件时,有时会出现iOS11以下版本的设备无法正常显示Swiper的问题。这是由于Swiper内部使用了ES6的语法,而iOS11以下版本的系统并不支持ES6语法,导致代码执行出现错误。那么该如何解决这一问题呢?下面我们来详细讲解。 问题分析 我们在iOS11以下版本的设备中使用Swiper插件时,会发现sw…

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