基于 Node.js 与 Multer 的图片上传实现

作者:接口漫谈时间:2026-10-22 04:36:59浏览:520

本文介绍如何使用 Node.js 的 Express 框架结合 Multer 模块实现图片上传功能。前端通过 jQuery Ajax 发送请求,后端配置 diskStorage 将文件保存至 public/uploads 目录,并返回文件路径以在页面显示。

Node.js 图片上传实现概述

前端使用 jQuery 的 Ajax 发起请求,后端利用 Node.js 中的 multer 模块完成图片上传操作。该示例旨在强调动手实践的重要性,应确保能够独立实现功能,而非直接复用他人代码。

Node.js 图片上传实现概述

注意

请在 public 目录下新建一个名为 uploads 的文件夹,用于存储上传的图片文件。

安装 multer 模块:

环境配置与模块安装


npm i -S multer

代码

1. app.js

后端服务代码解析


const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();

//所有请求过来,都去项目当前的public目录下寻找所请求的文件,找到就返回
app.use(express.static('./public'));

//选择diskStorage存储
const storage = multer.diskStorage({
 destination: function (req, file, cb) {
  cb(null, path.resolve('public/uploads'));
 },
 filename: function (req, file, cb) {
  cb(null, Date.now() + path.extname(file.originalname));//增加了文件的扩展名
 }
});

const upload = multer({storage: storage});

app.post('/profile', upload.single('avatar'), function(req, res, next) {

 res.send({
  err: null,
  //filePath:就是图片在项目中的存放路径
  filePath: 'uploads/' + path.basename(req.file.path)
 });
});

app.listen(3000, function () {
 console.log("app is listening 3000 port");
});

2. index.html

前端交互与页面展示


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript" src="js/jquery-3.1.0.min.js"></script>

</head>
<body>
<form class="form-horizontal" enctype='multipart/form-data' method='post' action='javascript:;'>
  <input type="file" id="choose"/>
  <button onclick="handle()">上传</button>
  <img class="newImg"/>
</form>

<script>
  function handle() {
   //获取上传的File对象,此处是一张图片对象
    let file = document.getElementById("choose").files[0];
    let formData = new FormData();
    formData.append("avatar", file);//设置key为avartar,value为上述的File对象
    $.ajax({
      type: 'POST',
      url: '/profile',
      data: formData,
      processData: false,
      success: function (data) {
        $(".newImg").attr("src", data.filePath);//上传成功则图片显示
      },
      error: function (err) {
        console.log(err.message);
      }
    })
  }
</script>
</body>
</html>

演示地址在此

以上内容为本文的全部介绍,希望能对读者的学习提供协助,同时也感谢大家的支持。

作者最新文章