express上传图片
前言
express获取文件的写法比较独特,与我之前接触python后端完全不一样,所以我单独记录一下,内容比较水。
1.multer是什么
程序未动,代码先上
var express = require('express');
const multer = require('multer');
var HTTP = express.Router();
const upload = multer(); //这种写法就很奇怪
HTTP.post('/Inpaint', upload.any(), proc_inpaint); //只有加了这个,才能正常使用req.body,upload可以跟多种方法,不止是any()
async function proc_inpaint(req, _res) {
var token = req.body.sid;
const stamp = req.headers.stamp || false;
if (!token || !stamp || (token !== req.session.uid)) return res.status(401).json({
msg: code_msg.AccessDenied.message});
try {
const now = Date.now();
const stamp = token.stamp;
// token expired
if (now - stamp > 24 * 60 * 60 * 1000) {
return res.status(403).json({
msg: 'token过期'});
}
} catch (error) {
return res.status(403).json({
msg: 'token无效'});
}
var cmd = "Inpaint";
var file_type = req.body.file_type || false;
res.json({
message: 'Hello, World!' });
}
在 Express 应用中,multer 是一个用于处理 multipart/form-data 的中间件,通常用于处理文件上传。multipart/form-data 是一种编码类型,允许在一个请求中包含文本和文件数据。
为什么使用multer?
-
处理 multipart/form-data
Express 自带的中间件(如 body-parser)能够解析 JSON 和 URL 编码的数据,但无法处理 multipart/form-data。而 multer 专门设计用于处理这种类型的数据,特别适合用于文件上传。 -
文件解析与存储
multer 能够将上传的文件解析为文件对象,并提供几种不同的存储方式:内存存储(MemoryStorage):
将文件存储在内存中,以 Buffer 的形式提供。这种方式适合在处理后立即将文件传递到其他服务(如云存储)。
磁盘存储(DiskStorage):
将文件存储在本地磁盘上,提供了对文件保存路径和文件名的完全控制。 -
支持多文件上传
multer 支持同时上传多个文件,可以通过简单的配置处理单文件上传、多文件上传,或者按字段名分组上传文件。 -
文件过滤与验证
multer 允许在文件上传过程中进行文件类型的过滤和验证,例如:1.限制只接受某些类型的文件(如图片或 PDF)。
2.限制上传文件的大小。 -
安全性
multer 帮助避免常见的文件上传安全问题,比如防止用户通过上传恶意文件来攻击服务器。它可以限制文件的数量、大小,并通过过滤器限制文件类型。