Node.js进阶实践:Express与Multer实现文件上传
53 浏览量
更新于2024-08-30
收藏 71KB PDF 举报
“Nodejs进阶:基于express+multer的文件上传实例”
在Node.js的Web开发中,图片上传是一项常见的需求。为了实现这一功能,开发者可以利用Node.js社区提供的成熟库,例如multer和formidable。multer是Express框架处理multipart/form-data类型的表单数据(通常用于文件上传)的理想选择。本教程主要关注使用Express和multer来完成图片上传,并涵盖从基本操作到更高级的定制方法。
首先,要搭建开发环境,只需要执行一条命令:
```
npm install express multer multer --save
```
这会安装Express、multer以及multer依赖的库。
每个示例都包含两个核心文件:`app.js`(服务器端代码,负责处理文件上传请求)和`form.html`(前端页面,用于用户选择并提交文件)。
基础的单图上传实现如下:
在`app.js`中,设置Express应用并配置multer中间件,指定文件上传的目标目录(在这个例子中是`upload/`)。当收到'/upload'路由的POST请求时,multer会处理单个名为'logo'的文件上传,并将文件保存在指定目录下。GET请求'/form'则返回HTML表单供用户选择文件:
```javascript
var fs = require('fs');
var express = require('express');
var multer = require('multer');
var app = express();
var upload = multer({ dest: 'upload/' });
// 单图上传
app.post('/upload', upload.single('logo'), function(req, res, next) {
res.send({ ret_code: '0' });
});
app.get('/form', function(req, res, next) {
var form = fs.readFileSync('./form.html', { encoding: 'utf8' });
res.send(form);
});
app.listen(3000);
```
对应的`form.html`页面是一个简单的HTML表单,包含一个文件输入字段和提交按钮,表单提交的地址是'/upload-single':
```html
<form action="/upload-single" method="post" enctype="multipart/form-data">
<h2>单图上传</h2>
<input type="file" name="logo">
<input type="submit" value="提交">
</form>
```
启动服务器后(`node app.js`),用户可以通过访问`http://127.0.0.1:3000/form`来上传图片。
除了基础的单图上传,multer还支持多图上传和自定义保存路径及文件名。通过修改multer配置或在处理文件上传的回调函数中进行处理,可以实现更多高级功能。例如,可以动态生成文件名、根据上传文件的类型进行分类存储,甚至对上传的图片进行预处理(如缩放、裁剪等)。
通过学习和实践这些基础和进阶用法,开发者能够熟练掌握使用Express和multer进行文件上传的能力,从而在实际项目中灵活运用。
2017-12-06 上传
2018-11-27 上传
2020-12-23 上传
2021-02-04 上传
2021-02-05 上传
2020-12-23 上传
2021-03-11 上传
2021-07-24 上传
2021-05-15 上传
weixin_38672800
- 粉丝: 4
- 资源: 917
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建