Node.js中使用Express和Multer实现图片上传
作者:栖木时间:2026-10-22 12:09:41浏览:238
本文详细介绍如何在Node.js环境中结合Express框架与Multer中间件实现图片上传功能。通过前端Ajax异步提交FormData数据,后端利用Multer解析multipart/form-data格式,完成文件存储与路径返回的完整流程。
Node.js Express Multer 图片上传完整教程
下面介绍如何利用Express框架配合Multer中间件,在Node.js环境中实现图片上传功能。
前端数据封装与提交
前端页面通过Ajax发起异步请求,利用file-input组件选择文件,并借助FormData对象封装图片数据,最终通过POST方法发送至服务器。
后端中间件配置
在Node.js服务端,配置Multer中间件以处理接收到的上传路由接口请求。
参考Multer官方文档获取详细配置信息。
查看package.json文件以确认依赖安装情况。

前端代码实现
以下是HTML页面的相关代码结构。
<body>
<div class="form-group">
<label>File input:</label>
<input type="file" name="file" id="file">
<p id="result"></p>
<img id="img" src="">
</div>
<button id="upload" class="btn btn-default">提交</button>
</body>
前端JavaScript处理逻辑如下。
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
//上传图片的业务逻辑函数
function uploadFile(){
//上传图片的input
var file = document.getElementById("file")
//因为准备用post提交,又因为图片的内容比较大,所以我们选择使用formdata来承载数据
//创建formdata对象
var formData = new FormData();
//给formdata对象中放入数据(键值对的方式)
formData.append('file',file.files[0]);
//提交请求
$.ajax({
url: '/upload',//请求路径
type: 'POST',
data: formData,
contentType: false,//为了让浏览器根据传入的formdata来判断contentType
processData: false,//同上
success: function(data){
if(200 === data.code) {
$('#result').html("上传成功!");
$('#img').attr('src',data.data);
} else {
$('#result').html("上传失败!");
}
console.log(2)
},
error: function(){
$("#result").html("与服务器通信发生错误");
}
});
console.log(1)
}
//给按钮添加点击事件
function postPage() {
//上传按钮
var uploada = document.getElementById('upload');
uploada.addEventListener("click",function () {
uploadFile();
},false);
}
window.onload = function () {
postPage();
}
</script>
后端逻辑代码
Node.js后端的业务逻辑代码实现。
const http = require('http')
const path = require('path')
const express = require('express')
//是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件
//文档:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
const multer = require('multer')
const app = express()
//配置express的静态目录
app.use(express.static(path.join(__dirname, 'public')));
app.get('/',(req,res)=>{
res.sendFile(__dirname+'/index.html')
})
//配置diskStorage来控制文件存储的位置以及文件名字等
var storage = multer.diskStorage({
//确定图片存储的位置
destination: function (req, file, cb){
cb(null, './public/uploadImgs')
},

//确定图片存储时的名字,注意,如果使用原名,可能会造成再次上传同一张图片的时候的冲突
filename: function (req, file, cb){
cb(null, Date.now()+file.originalname)
}
});
//生成的专门处理上传的一个工具,可以传入storage、limits等配置
var upload = multer({storage: storage});
//接收上传图片请求的接口
app.post('/upload', upload.single('file'), function (req, res, next) {
//图片已经被放入到服务器里,且req也已经被upload中间件给处理好了(加上了file等信息)
//线上的也就是服务器中的图片的绝对地址
var url = '/uploadImgs/' + req.file.filename
res.json({
code : 200,
data : url
})
});
http.createServer(app).listen(3000,()=>{
console.log('server is listening')
})
开发过程基本顺利,尽管该文章曾被从博客园首页移除。
再发一次,if(delete){
alert('Never publish anything again.')
}else{
alert(1)
}
对整体实现过程进行总结。
以上即为基于Express和Multer的Node.js图片上传功能详解,希望能为读者提供帮助。如有疑问欢迎留言,小编将及时回复。感谢大家的支持!
作者最新文章
NestJS 是什么?与 Express、Koa 的核心区别及选型建议
2026-11-05 13:46:41
生产环境升级 Node.js 的注意事项与兼容性测试策略
2026-11-05 09:19:24
nvm 常用命令详解:怎么平滑切换和升级 Node.js 版本
2026-11-04 09:02:34
JavaScript和JSP的根本区别:运行环境与执行机制解析
2026-11-03 23:30:18
使用nvm卸载指定版本Node.js并切换默认环境
2026-11-03 23:09:26
