node 实现文件上传中间件

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: node 实现文件上传中间件

node js 实现文件上传


实现了一个文件上传的中间件,重点引用了一个文件上传的库,multer


传送门


const express = require('express');
const router = express.Router();
const path = require('path');
const multer = require('multer');
exports.successMsg = function (msg, datas) {
    return {
        code: 200,
        msg: msg,
        datas: datas
    }
}
// 文件存入磁盘
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, path.resolve(__dirname, './../../public/upload'))
    },
    filename: function (req, file, cb) {
        const ext = path.extname(file.originalname);
        const fileName = Date.now() + '-' + Math.random().toString(36).slice(-6) + ext;
        cb(null, fileName)
    }
})
const upload = multer({storage});
router.post('/', upload.single('img'), (req, res) => {
    const obj = exports.successMsg('上传成功', {
        url: 'upload/' + req.file.filename,
    })
    res.status(200).send(obj);
})
module.exports = router;


效果如下:


20201226152031700.png


原理


get vs post : 文件上传有好多人的误区是只能用post,对于这一点来说,我个人是不太赞同的,get 和 post 都是基于http上的一种数据传输协议,而对于文件上传来说,文件本身是比较大的数据,我们在传输的时候理论上是可以使用get的,只是这么做的性价比不是最好的。


contentType: 对于文件上传来说,我们一般是使用multipart/form-data,但是我们能不能使用contentType 为 json 呢? 理论上也是可以的,我们把文件转成base64的字符串是一种方式,还有就是使用 ArrayBuffer 来装文件的二进制的数据。


文件上传multer的原理


2020122615280227.png


如上图,我们可以看见文件上传的contentType 为 multipart/form-data,里面有一个boundary(边界),在取数据的时候其实是通过这个边界的字符串一个一个分开的,然后在通过流的方式来进行一段一段的传输,从而获取文件或者其他的数据信息


相关文章
|
2月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
2月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
2月前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
39 1
|
3月前
|
JSON JavaScript 中间件
深入浅出Node.js中间件机制
本文将带你探索Node.js中一个核心概念——中间件机制。我们将通过浅显的语言和生动的比喻,揭示中间件如何作为请求和响应之间的“交通枢纽”,在应用程序中起到至关重要的作用。从基础原理到实际应用,你将了解到中间件不仅简化了代码结构,还提高了开发效率,是Node.js开发不可或缺的一部分。
62 1
|
3月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第4天】在探索Node.js的海洋中,中间件机制犹如一座灯塔,为开发者指引方向。本文将带你一探究竟,从浅入深地理解这一核心概念。我们将通过生动的比喻和实际代码示例,揭示中间件如何在请求和响应之间搭建桥梁,实现功能的扩展与定制。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
63 0
|
4月前
|
JavaScript 前端开发 中间件
深入浅出Node.js中间件模式
【9月更文挑战第13天】本文将带你领略Node.js中间件模式的魅力,从概念到实战,一步步揭示如何利用这一强大工具简化和增强你的Web应用。我们将通过实际代码示例,展示中间件如何在不修改原有代码的情况下,为请求处理流程添加功能层。无论你是前端还是后端开发者,这篇文章都将为你打开一扇通往更高效、更可维护代码的大门。
|
5月前
|
JavaScript 中间件 开发者
深入浅出Node.js中间件机制
【8月更文挑战第31天】本文将带你领略Node.js中间件的奥秘,通过直观的案例分析,揭示其背后的设计哲学。你将学会如何运用中间件构建强大而灵活的后端应用,以及在面对复杂业务逻辑时如何保持代码的清晰与高效。
|
8月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
121 0
|
7月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1837 0
|
6月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
287 3