express的使用(三) multer处理表单提交

news/2024/10/17 17:22:05/

个人博客

欢迎关注公众号:express的使用(三) multer处理表单提交

看前提示

本篇的主要流程是使用在前端提交一个文件,在nodejs编写的后端使用multer以及express进行接收,包括遇到的版本问题,如果是想要学习用body-parser、formidable、multiparty等文件上传的,请不要浪费时间,或者后续我会写一篇做相关的。

Multer的简单介绍

Multer is a node.js middleware for handling multipart/form-data, which
is primarily used for uploading files. It is written on top of
busboy for maximum efficiency.

Multer accepts an options object, the most basic of which is the dest
property, which tells Multer where to upload the files. In case you
omit the options object, the files will be kept in memory and never
written to disk.

Multer will not process any form which is not multipart
(multipart/form-data).

版本依赖

    "multer": "^1.4.5-lts.1",

postman发起请求(multipart/form-data; )
请添加图片描述
请求的内容如下

curl --location --request POST 'http://localhost:3000/user/fileUpload' \
--form 'file=@"/C:/Users/34714/Documents/DSC05948.JPG"'

后端处理请求

在本场实例中,使用multer.single方法教学测试,只获取单个文件,如需获取多个文件,请使用array方法或any方法

Accept a single file with the name fieldname. The single file will be
stored in req.file.

配置multer对象

const multer = require("multer");
const upload = multer();

使用multer监听指定的api

// 文件上传api
router.post("/fileUpload", upload.single("file"), (req, res, next) => {console.log("文件的信息是===================>");console.log(req.file);
});

注意,如果将multer的方法配置在app的中间件中,则是监听所有的路由,会造成很不必要的浪费,建议只监听所需要的那几个接口就可以了

运行结果

在这里插入图片描述
可以看到,组成的成分有文件名,文件类型,文件的buffer,文件的编码方式 这4个很重要的信息,而此时还有个问题,现在已经将文件存放在内存中了,很遗憾本篇也要结束了,至于如何存储到磁盘,以及限定上传文件的大小,上传文件的类型等,强烈建议查看文档
https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md

其他扩展

使用multer的理由很简单,文件的保存我们很多时候都是存在第三方,不会放在磁盘中,比如前面提及到的s3等,multer能将文件存放在内存中,可以跳过磁盘存储,这就是我个人选择使用multer理由。
而存于内存中的文件要如何处理,下一篇博客会讲解到,毕竟node更适合做中转。

备注

部分同学使用multer的lts版本时候会遇到问题,建议尝试降版本,以防止兼容问题

相关文档

https://www.expressjs.com.cn/resources/middleware/body-parser.html
https://github.com/expressjs/multer/


http://www.ppmy.cn/news/123334.html

相关文章

如何判断一个点是否在凸多边形内 - golang

判断一个点是否在凸多边形内的方法很多,此处仅给出使用向量叉积法判断点是否在凸多边形内的方法。 以下图为例说明问题: 原理: 1. 将多边形的第 i 条边的第一个顶点指向点 P 得到向量 v1,然后将从第一个顶点指向第二个顶点得到向…

uniapp-前端 二维码、扫码、长按、识别等问题

一&#xff1a;识别&#xff1a;图片二维码url&#xff1a; 后端返回二维码的图片url&#xff0c;则直接展示&#xff0c;做长按手势识别&#xff0c;再调用方法即可。 <mage>标签长按识别实现&#xff08;微信版本>2.7.0&#xff09; <image show-menu-by-long…

ROM RAM和硬盘的区别

文章目录 ROMPROMEPROMOTPROMEEPROM Flash MemonyRAMSRAMDRAM 硬盘虚拟内存 ROM ROM全称 Read Only Memony&#xff0c;为只读存储器&#xff0c;最开始的 ROM 存储信息后就不能更改&#xff0c;但是经过发展&#xff0c;ROM也可以更改存储信息。 PROM 可编程程序只读存储器…

2. 虚拟环境

一、为什么要搭建虚拟环境&#xff1f; 在实际开发过程中&#xff0c;多个程序可能需要调试各种版本的不同环境&#xff0c;比如不同的Python解释器&#xff0c;不同的flask版本 二、如何搭建虚拟环境&#xff1f; 什么是虚拟环境&#xff1f; 它就是一个特殊的文件夹&…

[20161216]关于library cache lock.txt

[20161216]关于library cache lock.txt --这几天一直在关注这个链接,http://www.itpub.net/thread-2073170-1-1.html --就是library cache lock导致挂死业务,一般引起这个问题编译包,而应用正好在使用执行这个包,以及11g口令大小写导致无法登录的问题, --我自己很久以前也遇到过…

perl DBD Informix install and test

转载: http://heyiyi.blog.51cto.com/205455/1600615 1.安装Informix_Client_SDK 1)root用户登录&#xff0c;添加informix home目录、组、用户 # mkdir -p /opt/informix # groupadd informix # useradd -G informix -d /opt/informix informix # passwd informix # chown inf…

Vistor简介

Vistor简介 Vistor虚拟带库系统是cofio公司的一款虚拟带库软件解决方案&#xff0c;用来实现高性能的磁盘备份&#xff0c;同真实带库一样的磁带管理机制提高了管理效率。Vistor支持iscsi和FC&#xff0c;可以模拟多种型号的磁带库&#xff0c;允许创建多个不同的带库&#xff…

网络渗透工具--下

工具 中间件扫描、指纹识别类 wyportmap ——目标端口扫描系统服务指纹识别 传送门↓ https://github.com/ring04h/wyportmap weakfilescan ——动态多线程敏感信息泄露检测工具 传送门↓ https://github.com/ring04h/weakfilescan wafw00f ——WAF产品指纹识别 传…