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日

相关文章

  • nodejs实现获取当前url地址及url各种参数值

    首先,我们需要安装Node.js,然后创建一个新的Node.js项目,并安装url核心模块来解析URL。 在项目中,我们可以通过内置的http模块来创建一个HTTP服务器,然后处理客户端请求,其中URL是重要的一部分。我们可以使用req.url属性来获取当前URL地址。接下来,我们可以使用url.parse()方法来将URL解析为URL对象,从而获取其中的参…

    node js 2023年6月8日
    00
  • 如何在Linux上安装Node.js

    下面是在Linux上安装Node.js的详细攻略: 1. 更新系统 在安装Node.js之前,应该先更新系统中的所有软件包。 在Ubuntu系统中,可以使用以下命令更新已安装的软件包: sudo apt-get update sudo apt-get upgrade 在CentOS系统中,可以使用以下命令更新已安装的软件包: sudo yum update …

    node js 2023年6月8日
    00
  • 利用node.js搭建简单web服务器的方法教程

    下面是详细讲解“利用node.js搭建简单web服务器的方法教程”的完整攻略。 准备工作 在开始之前,需要先安装node.js。安装完成后,可以通过以下命令来检查是否安装成功: node -v 如果返回了版本号,则说明安装成功。 创建项目文件夹 在电脑上创建一个新的文件夹,命名为”web-server”,然后进入该文件夹。 初始化项目 进入”web-serv…

    node js 2023年6月8日
    00
  • Windows下使用Nodejs运行js的方法

    Windows下使用Nodejs运行js的方法 Nodejs是一个基于Chrome V8引擎的Javascript运行环境,能够让Javascript运行于服务器端。在Windows系统下,我们可以通过安装Nodejs来运行js文件。 安装Nodejs 打开Nodejs官网:https://nodejs.org 点击“下载”,下载适合自己操作系统版本的安装包…

    node js 2023年6月7日
    00
  • Node.js API详解之 string_decoder用法实例分析

    好的。先介绍一下如何组织一篇Markdown格式的文章: 标题用#表示,#越多代表标题级别越高。代码块使用“`包裹,可以指定语言类型,例如javascript。引用内容使用>。*开头表示无序列表,数字开头表示有序列表,-开头表示二级无序列表,以此类推。还有其他格式,可以参考Markdown教程。 下面开始具体介绍“Node.js API详解之 str…

    node js 2023年6月8日
    00
  • JavaScript深拷贝方法structuredClone使用

    JavaScript中的拷贝(复制)有两种:浅拷贝和深拷贝。 浅拷贝只复制基本数据类型的值,而对于引用数据类型(如对象,数组等),只复制了其引用地址,因此它们指向同一个对象,当一个对象的值改变,另一个对象的值也会跟着改变。 而深拷贝则会复制出一个全新的对象,与被复制的对象互不影响。 这里介绍一种深拷贝方法,即使用“structuredClone”。 1. s…

    node js 2023年6月8日
    00
  • node将geojson转shp返回给前端的实现方法

    要实现“node将geojson转shp返回给前端”的功能,可以采用以下步骤: 安装相关依赖 在Node.js中,我们可以使用geojson2shp库将GeoJSON文件转换为Shapefile文件。首先需要在命令行中安装该库,命令如下: npm install geojson2shp –save 创建服务器 使用Node.js创建一个简单的服务器,监听前…

    node js 2023年6月8日
    00
  • NodeJs安装npm包一直失败的解决方法

    针对Node.js安装npm包一直失败的问题,我们来详细讲解一下解决方法的攻略。 问题描述 在使用Node.js安装npm包时,有时会遇到以下错误提示: npm ERR! Failed to download package …… npm ERR! network request…… 或者 npm ERR! code EINTEGRITY n…

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