express获取文件

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 帮助避免常见的文件上传安全问题,比如防止用户通过上传恶意文件来攻击服务器。它可以限制文件的数量、大小,并通过过滤器限制文件类型。


1. 安装express和multer ``` npm install express multer --save ``` 2. 引入依赖 ``` const express = require('express') const multer = require('multer') const path = require('path') ``` 3. 创建express实例 ``` const app = express() ``` 4. 配置multer ``` const storage = multer.diskStorage({ // 设置上传后文件路径,uploads文件夹会自动创建。 destination: function (req, file, cb) { cb(null, 'uploads/') }, // 给上传文件重命名,获取添加后缀名 filename: function (req, file, cb) { const extname = path.extname(file.originalname) cb(null, Date.now() + extname) } }) const upload = multer({ storage: storage }) ``` 5. 创建路由 ``` // 单文件上传 app.post('/upload', upload.single('file'), (req, res, next) => { const file = req.file if (!file) { const error = new Error('Please upload a file') error.httpStatusCode = 400 return next(error) } res.send(file) }) // 多文件上传 app.post('/uploads', upload.array('files', 12), (req, res, next) => { const files = req.files if (!files) { const error = new Error('Please upload files') error.httpStatusCode = 400 return next(error) } res.send(files) }) ``` 6. 启动服务 ``` app.listen(3000, () => { console.log('Server started on port 3000') }) ``` 完整代码如下: ``` const express = require('express') const multer = require('multer') const path = require('path') const app = express() const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { const extname = path.extname(file.originalname) cb(null, Date.now() + extname) } }) const upload = multer({ storage: storage }) app.post('/upload', upload.single('file'), (req, res, next) => { const file = req.file if (!file) { const error = new Error('Please upload a file') error.httpStatusCode = 400 return next(error) } res.send(file) }) app.post('/uploads', upload.array('files', 12), (req, res, next) => { const files = req.files if (!files) { const error = new Error('Please upload files') error.httpStatusCode = 400 return next(error) } res.send(files) }) app.listen(3000, () => { console.log('Server started on port 3000') }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hola173841439

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值