Express 上传文件 Multer

在日常开发的方方面面,图片和资源上传已经是前后端开发中必不可少的环节了。在express中,如何接收和处理客户端上传的文件呢?

在 express 当中,如果要实现文件上传,是需要借助一个中间件 multer,它用于处理 multipart/form-data 类型的表单数据。

注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。

Multer官网

基本使用

const express = require("express");
const multer = require("multer");
const app = express();
const port = 3000;
// dest 在哪里存储文件
const upload = multer({ dest: 'uploads/' })app.post('/profile', upload.single('avatar'), function (req, res, next) {// req.file 是 `avatar` 文件的信息// req.body 将具有文本域数据,如果存在的话
})app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {// req.files 是 `photos` 文件数组的信息// req.body 将具有文本域数据,如果存在的话
})const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {// req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组// 例如://  req.files['avatar'][0] -> File//  req.files['gallery'] -> Array//// req.body 将具有文本域数据,如果存在的话
})app.listen(port, () => {console.log(`Example app listening on port ${port}`);
});

磁盘存储引擎 (DiskStorage)

磁盘存储引擎可以让你控制文件的存储。

const upload = multer({storage: multer.diskStorage({// 用来确定上传的文件应该存储在哪个文件夹中destination: (req, file, cb) => {cb(null, "./uploads");},// 用于确定文件夹中的文件名filename: (req, file, cb) => {cb(null, file.fieldname + '-' + Date.now())},}),
});

错误处理机制

如果你想捕捉 multer 发出的错误,你可以自己调用中间件程序。如果你想捕捉 Multer 错误,你可以使用 multer 对象下的 MulterError 类 (即 err instanceof multer.MulterError)。

const multer = require('multer')
const upload = multer().single('avatar')app.post('/profile', function (req, res) {upload(req, res, function (err) {if (err instanceof multer.MulterError) {// 发生错误} else if (err) {// 发生错误}// 一切都好})
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】HOT100+代码随想录:动态规划(下)

目录 三、打家劫舍 LeetCode198:打家劫舍 LeetCode213:打家劫舍ii LeetCode337:打家劫舍iii(树形) 四、股票问题 时间不多了,其他的先不写了 LeetCode121:买卖股票的最佳时机 五、子序列…

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题,这边想要查询为什么出现无法访问的原因,但不知道如何在主机上面进行检查,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,因此联系Hostease的咨询了Hostease技术支持&a…

建立FTP服务器

文章目录 建立FTP服务器1. 使用VMware安装CentOS 7虚拟机。2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。3.配置yum源&#xff0…

深度解读CharGPT基本原理

CharGPT(这里似乎有一个小误会,可能是想指代的是“ChatGPT”,因为没有“CharGPT”的具体记录或产品)是OpenAI在2022年11月30日推出的一个革命性的语言模型应用。虽然直接称为“CharGPT”的查询可能是个笔误,但基于您的…

能芯(EnChip)模拟芯片应用和选型

数据显示,超过60%的驾驶者会在开车时听音乐,这不仅可以提高驾驶者的注意力,还可以缓解驾驶过程中产生的疲劳和压力,特别是在长途驾驶或交通拥堵时尤其明显。基于音乐欣赏,高保真音质是音响系统的核心指标之一&#xff…

高考前很焦虑?看看罗永浩提的三个建议!罗永浩推荐的随身WiFi居然蕴含这样的商机?2024普通人如何翻身?

你能相信现如今身家过亿的老罗罗永浩高中就辍学了吗?相信很多人都不敢置信吧。罗永浩无论是表现出来的口才、情商还是智商,无论如何都无法让人把他和高中辍学联系起来。 而这一点似乎也是老罗人生中的一个遗憾,于是又在一年高考季的时候&…

相对位姿估计

相对位姿估计 示意图 理论推导 离线数据库: P的位置 P [ X , Y , Z ] T P[X,Y,Z]^{T} P[X,Y,Z]T 相机内参 k 1 k_{1} k1​ 安卓手机: 相机内参 k 2 k_{2} k2​ 两个像素点位置 : p 1 和 p 2 p_1和p_2 p1​和p2​ 公式一:…

为师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过…

5月岚庭工人大会“安全就是效率、形象即是品质”

2024年5月18日、19日岚庭一月一期的“产业工人大会”和“工程大会”圆满举行初夏正当时,此次大会主要围绕“安全”与“形象”展开六场专题培训只为精益求精产业工人和装修管家全体到场。 岚庭 以绝对【安全】护家护园 安全就是生命,违章就是事故&#x…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统(DMS:Document Management System)是一种软件系统,用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档,如文本文档、电子表格、图像、音频或视频文件等…

从一维到二维:数组转换的奥秘与应用

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:数组转换的魅力 二、一维数组转二维数组的基础方法 1. 确定二维数组的…

HTML拆分与共享方式——多HTML组合技术

作者:私语茶馆 1.应用场景 如果是一个产品级的Web项目,往往非常多的页面部分是重复的(为保持风格一致),每个HTML页面将这些重复部分重新写一次,既带来极大的工作量,也造成后续修改不便。 因此会考虑到将一个HTML的不同部分拆分为多个HTML页面,利用类似Include方式包含…

Web开发中,就session和cookie相比,用session比用cookie的优点有哪些?

在Web项目中,session和cookie都是用于存储用户数据的机制,但它们有不同的优缺点。使用session比使用cookie有以下几个主要优点: 1. 安全性更高 敏感数据保护:Session数据存储在服务器端,而不是客户端。这样&#xff…

VBA技术资料MF159:实现某个区域内的数据滚动

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

Midjourne进阶篇 | 个性化潮玩

当Midjourney遇上潮玩,你想不到的惊艳! 前言盲盒魔法公式**01.嘻哈潮玩****02.荧光猫少女****03.古风剑侠****04.音乐节少年****05.Q版古风少女** 总结 前言 以前,制作盲盒需要专业盲盒设计师完成,对于大部分人来说,这…

2021CSP-J普及组复赛-第一题:分糖果

2021CSP-J普及组复赛 第一题: 题目: 输入: 7 16 23输出: 6思路: 这是一个简单的思考题,没有用到重要的算法 ①简单的思路即暴力方法就是利用for循环从L 到 R 遍历求出其中最大的奖励值,由于R…

【C language】统计某数中二进制1的个数

题解:统计某数中二进制1的个数(取模法 看某位是1/0法 干掉最右边的1法) 目录 1.题目2.取模法3.看某位是1/04.干掉最右边的1 1.题目 题目:设计一个程序,统计某数中二进制1的个数 2.取模法 int main() {int num 15;int count 0;while (n…

用于水利工程系统方面的传感器M-A542VR10

近几年快速发展的IC技术和计算机技术,为传感器的发展提供了良好与可靠的科学技术基础。使传感器的发展日新月益,且数字化、多功能与智能化是现代传感器发展的重要特征爱普生也在不断发展自己的传感器型号。随着水利工程技术的不断进步,传感器…

代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 文档讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%8…

python基础知识总结(第一节)

一、python简介: Python是一种解释型,面向对象的高级语言。 Pyhton的语法和动态类型,以及解释性语言的本质,使它一跃成为多数平台上写脚本和快速开发应用的编程语言。 python语言百度百科介绍 二、Python基础语法:…