ajax +NodeJS 实现图片上传实例

yizhihongxing

下面是“ajax +NodeJS 实现图片上传实例”的完整攻略。

前提条件

  • 前端使用jQuery库
  • 后端使用NodeJS和express框架
  • 需要安装multer中间件处理文件上传

实现过程

1. 前端页面

在前端页面中,需要准备一个表单,其中包含一个input[type=file]元素,用于选择要上传的图片。此外,还需要添加一个button,用于提交表单数据。

HTML代码示例:

<form id="uploadForm" enctype="multipart/form-data">
  <input type="file" name="avatar">
  <br><br>
  <button type="submit">上传图片</button>
</form>

2. 前端JavaScript代码

前端JavaScript代码使用jQuery库实现,通过ajax向后端发送数据。

$('#uploadForm').submit(function(e) {
  e.preventDefault(); // 阻止表单默认提交操作
  var formData = new FormData(this); // 获取表单数据
  $.ajax({
    url: '/upload',
    type: 'POST',
    data: formData,
    cache: false, // 不缓存数据
    contentType: false, // 不设置请求头
    processData: false, // 不处理数据
    success: function(data) {
      console.log('上传成功');
    },
    error: function() {
      console.log('上传失败');
    }
  });
});

3. 后端NodeJS代码

使用express框架编写NodeJS后端代码,实现文件上传功能。

var express = require('express');
var multer = require('multer');
var app = express();

// 设置文件存储路径和文件名
var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, './uploads/');
  },
  filename: function(req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

// 创建multer中间件
var upload = multer({ storage: storage });

// 处理POST请求
app.post('/upload', upload.single('avatar'), function(req, res, next) {
  if (!req.file) {
    res.status(500).json({ message: '上传失败' });
  } else {
    res.status(200).json({ message: '上传成功' });
  }
});

// 启动服务器
app.listen(3000, function() {
  console.log('Server is running on port 3000');
});

在上述代码中,使用了multer中间件处理文件上传,其中destination属性定义了文件存储路径,filename属性定义了存储的文件名,upload.single('avatar')表示只允许上传一个名为avatar的文件,最后通过JSON格式返回上传结果。

示例说明

为了更好的理解,这里提供两个实例说明:

  1. 上传文件后,返回上传成功或上传失败信息

前端代码:

$.ajax({
  url: '/upload',
  type: 'POST',
  data: formData,
  cache: false,
  contentType: false,
  processData: false,
  success: function(data) {
    if (data.message === '上传成功') {
      alert('上传成功!');
    } else {
      alert('上传失败!');
    }
  },
  error: function() {
    console.log('上传失败');
  }
});

后端代码:

app.post('/upload', upload.single('avatar'), function(req, res, next) {
  if (!req.file) {
    res.status(500).json({ message: '上传失败' });
  } else {
    res.status(200).json({ message: '上传成功' });
  }
});
  1. 上传文件后,返回上传图片的链接地址

前端代码:

$.ajax({
  url: '/upload',
  type: 'POST',
  data: formData,
  cache: false,
  contentType: false,
  processData: false,
  success: function(data) {
    if (data.url) {
      $('#preview').attr('src', data.url);
    } else {
      alert('上传失败!');
    }
  },
  error: function() {
    console.log('上传失败');
  }
});

后端代码:

app.post('/upload', upload.single('avatar'), function(req, res, next) {
  if (!req.file) {
    res.status(500).json({ message: '上传失败' });
  } else {
    var url = req.protocol + '://' + req.get('host') + '/' + req.file.path;
    res.status(200).json({ url: url });
  }
});

这里使用req.protocol和req.get获取协议和域名,再通过req.file.path获取上传图片的路径,拼接成完整的图片链接地址,返回给前端。在前端代码中,使用$('#preview').attr('src', data.url);将图片链接设置到一个img元素的src属性中,即可预览上传的图片。

这就是“ajax +NodeJS 实现图片上传实例”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ajax +NodeJS 实现图片上传实例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 使用js声明数组,对象在jsp页面中(获得ajax得到json数据)

    下面是使用JavaScript声明数组和对象,并在JSP页面中获取AJAX获取的JSON数据的完整攻略: 步骤一:准备工作 首先,在JSP页面中引入jQuery库,以便使用AJAX获取JSON数据。可以使用以下代码: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1…

    node js 2023年6月8日
    00
  • 深入理解Node内建模块和对象

    深入理解Node内建模块和对象需要我们具备以下知识: Node.js的内置模块列表 Node.js内置对象的使用方法和功能 Node.js的内置模块列表 Node.js提供了丰富的内置模块,可以用于处理不同的任务,包括操作文件系统、网络通信、加密、压缩等等。以下是Node.js内置模块的列表: assert:断言模块 buffer:缓存模块 child_pr…

    node js 2023年6月8日
    00
  • 尤雨溪开发vue dev server理解vite原理

    “尤雨溪开发vue dev server理解vite原理”这篇文章主要讲解了尤雨溪是如何通过开发 Vue Dev Server 的方式,从而实现了 Vite 的原理。下面是该攻略的完整内容: 理解 Vite 的原理 Vite 是一个基于原生 ES 模块代码运行的构建工具,通过运行时编译和按需编译的方式来提高开发效率。 运行时编译: 在浏览器中通过原生的 ES…

    node js 2023年6月8日
    00
  • Nodejs搭建多进程Web服务器实现过程

    Node.js是一个基于Chrome V8引擎运行JavaScript的开发平台,通过Node.js构建Web应用可以实现高并发、高可靠性,且易于开发和部署。本攻略旨在介绍如何使用Node.js搭建多进程Web服务器,以实现更高的并发量和更佳的性能表现。 一、多进程Web服务器的优劣 多进程Web服务器的优势在于多进程之间可以相互独立,互不干扰,可以有效地充…

    node js 2023年6月8日
    00
  • Node.js创建HTTP文件服务器的使用示例

    下面我将为您详细讲解如何使用Node.js创建HTTP文件服务器。 概述 Node.js是一个非常流行的JavaScript后端运行环境,它可以帮助我们轻松创建一个HTTP服务器并用于提供Web请求服务。本文将会介绍如何使用Node.js快速创建一个HTTP文件服务器。 步骤 步骤1:安装Node.js 首先我们需要安装Node.js,在官方网站 https…

    node js 2023年6月8日
    00
  • 详解Node.js一行命令上传本地文件到服务器

    详解Node.js一行命令上传本地文件到服务器的完整攻略如下: 前言 Node.js是一种基于Chrome V8引擎运行的JavaScript运行环境,可以直接在服务器端运行JavaScript代码。Node.js具有非阻塞IO和高并发等优势,因此可以用来处理网络应用程序中的大量并发请求。在此基础上,我们可以轻松地使用Node.js来实现文件上传功能。 依赖…

    node js 2023年6月8日
    00
  • JavaScript内存泄漏的处理方式

    请您先了解JavaScript内存泄漏的概念: JavaScript是一种自动内存管理语言,这意味着开发人员不需要手动分配和释放内存。相反,JavaScript解释器在运行时会自动跟踪和管理内存。然而,JavaScript程序员仍然需要避免内存泄漏。 内存泄漏指的是不再有用的内存一直保留在内存中,不能被垃圾回收机制回收,最终会导致内存耗尽。一旦内存耗尽,应用…

    node js 2023年6月8日
    00
  • vue2从数据变化到视图变化之diff算法图文详解

    Vue2从数据变化到视图变化之diff算法图文详解 什么是diff算法? diff算法,全称为“数据变化比较算法”,是前端框架实现响应式更新视图的关键算法之一,Vue框架在更新组件视图时也是基于此算法实现的。其本质目的是为了找到虚拟DOM树上新旧节点之间的差异,通过局部更新减少web浏览器对DOM的操作次数,提高渲染性能。 diff算法的工作原理 diff算…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部