Node.js结合Ajax实现无刷新图片上传详解

作者:星河

时间:2026-10-22

浏览:151

本文介绍如何利用Node.js、Ajax和FormData对象实现网页无刷新上传图片。通过HTML5 input标签获取文件,使用JavaScript构造FormData并发送POST请求,后端借助Express官方推荐的Multer中间件处理文件存储。文章提供了完整的前后端代码示例及Multer配置说明,包括单文件与多文件上传的处理方式。

文章目录

Node.js结合Ajax实现无刷新图片上传详解

传统方式上传图片通常需要提交form表单,这会导致页面刷新或跳转。

借助Ajax技术与FormData对象,可以有效避免页面刷新问题。

以下是实现该功能的关键代码示例。

HTML部分代码


<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>

请注意input标签中 type="file"属性的设置。

JavaScript部分代码


function uploadFile(){
 var file = document.getElementById("file")
 var formData = new FormData();
 formData.append('file',file.files[0]);
 $.ajax({
  url: '/upload',
  type: 'POST',
  data: formData,
  // async: false,
  cache: false,
  contentType: false,
  processData: false,
  success: function(data){
   if(200 === data.code) {
    $('#result').html("上传成功!");
    $('#img').attr('src',data.data);
   } else {
    $('#result').html("上传失败!");
   }
   console.log('imgUploader upload success');
  },
  error: function(){
   $("#result").html("与服务器通信发生错误");
  }
 });
}

function postPage() {
    var uploada = document.getElementById('upload');
    uploada.addEventListener("click",function () {
      uploadFile();
    },false);
}

window.onload = function () {
  postPage();
}

Node.js后端处理代码


var storage = multer.diskStorage({
  destination: function (req, file, cb){
    cb(null, './public/images')
  },
  filename: function (req, file, cb){
    cb(null, file.originalname)
  }
});
var upload = multer({
  storage: storage
});
router.post('/upload', upload.single('file'), function (req, res, next) {
  var url = 'http://' + req.headers.host + '/images/' + req.file.originalname
  res.json({
    code : 200,
    data : url
  })
});

Multer是Express官方推荐的文件上传中间件。

文件上传可通过以下几种方法实现。


upload.single(‘file'), //适用于单文件上传。
upload.array(‘file',num), //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num。

此外,Multer还支持混合上传场景,例如同时上传1个A类文件和2个B类文件,具体用法可参考官方API文档。

参数file代表上传字段的名称,若使用form表单submit方式上传,该名称必须与表单中input的name属性保持一致。

上传文件的大小限制、文件名限制等均可在limits配置对象中设置,具体支持的属性请参考官方API文档。

Multer官方文档链接

本文内容希望对您的学习有所帮助,欢迎继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章