JavaScript实现图片上传并预览并提交ajax

JavaScript实现图片上传并预览并提交ajax,涉及到以下几个步骤:

  1. 通过input元素选择图片文件;
  2. 使用FileReader API将图片文件转换为base64格式的数据,并将其显示在页面上;
  3. 将base64格式的图片数据发送到服务器端,并接收服务器端的响应。

下面是详细的攻略:

步骤一:选择图片文件

使用HTML中的<input>元素来选择图片文件。这里我们选择 type="file" 的 input 元素。

<input type="file" id="upload" accept="image/*">

其中,id属性用于获取DOM元素,accept属性限制上传的文件格式为图片类型。

然后可以在JS代码中获取该元素,并监听它的change事件:

const upload = document.querySelector('#upload')
upload.addEventListener('change', handleFileSelect, false)

当用户选择了图片文件后,调用handleFileSelect函数,将图片文件传递进去。

步骤二:将图片预览在页面上

使用FileReader API将图片文件转换为base64格式的数据,并将其显示在页面上。

function handleFileSelect() {
  const file = this.files[0]
  const reader = new FileReader()

  reader.onload = event => {
    const img = new Image()
    img.src = event.target.result
    document.body.appendChild(img)
  }

  reader.readAsDataURL(file)
}

handleFileSelect函数中,首先获取用户选择的图片文件,并创建一个FileReader实例对象,然后为该实例对象添加一个onload事件处理函数。当文件读取完成后,该事件处理函数将被调用。

在该事件处理函数中,我们创建一个<img>元素,并将base64格式的图片数据赋值给该元素的src属性。最后将该元素添加到DOM文档中。

现在,我们已经成功将图片文件预览到页面中。

步骤三:提交图片数据到服务器端

最后一步是将图片发送给服务器端,需要使用XMLHttpRequest或fetch API实现ajax请求。

这里我们以fetch API为例:

function handleFileSelect() {
  const file = this.files[0]
  const reader = new FileReader()

  reader.onload = event => {
    const img = new Image()
    img.src = event.target.result
    document.body.appendChild(img)

    fetch('/upload', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ image: event.target.result })
    })
      .then(response => response.json())
      .then(data => console.log(data))
  }

  reader.readAsDataURL(file)
}

在该代码中,我们使用fetch函数发送一个POST请求到服务器端的/upload路由。请求头中设置Content-Typeapplication/json,请求体中包含图片的base64格式的数据。

在服务器端,我们可以接收到该请求,并使用base64格式的数据创建一个图片文件。

示例1:使用Node.js和express框架搭建服务器

const express = require('express')
const bodyParser = require('body-parser')
const fs = require('fs')
const path = require('path')

const app = express()
app.use(bodyParser.json())

app.post('/upload', (req, res) => {
  const image = req.body.image.split(',')[1] // 去掉base64数据前面的"data:image/png;base64,"字符串
  const buffer = Buffer.from(image, 'base64')
  const filename = `image_${Date.now().valueOf()}.png`
  const filepath = path.resolve(__dirname, filename)

  fs.writeFile(filepath, buffer, err => {
    if (err) {
      console.error(err)
      res.status(500).json({ message: 'Server Error' })
    } else {
      res.json({ message: 'File uploaded successfully' })
    }
  })
})

app.listen(8080, () => {
  console.log('Server started at http://localhost:8080')
})

在服务器端,我们使用express框架接收POST请求,并解析请求体中的JSON数据。然后将base64格式的数据转换为Buffer对象,并保存到服务器中。

示例2:使用PHP搭建服务器

<?php
if (isset($_POST['image'])) {
  $image = $_POST['image'];
  $image = str_replace('data:image/png;base64,', '', $image);
  $image = str_replace(' ', '+', $image);
  $data = base64_decode($image);

  $filename = 'image_' . time() . '.png';
  $filepath = './' . $filename;
  file_put_contents($filepath, $data);

  $response = array('message' => 'File uploaded successfully');
  echo json_encode($response);
}
?>

在PHP服务器端,我们通过$_POST全局变量获取请求体中的base64格式的图片数据,并将其转换为二进制数据。然后将二进制数据保存到服务器中,并返回一个JSON响应。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现图片上传并预览并提交ajax - Python技术站

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

相关文章

  • JavaScript面向对象实现贪吃蛇游戏

    JavaScript面向对象实现贪吃蛇游戏的步骤如下: 定义Snake类 Snake类表示贪吃蛇,包含以下属性: body:表示蛇身,由一个包含多个坐标的数组组成 direction:表示蛇的方向,可以取值为”up”、”down”、”left”、”right”之一 Snake类包含以下方法: move():根据方向移动蛇的位置,并更新蛇的身体 changeD…

    JavaScript 2023年6月10日
    00
  • JavaScript事件循环及宏任务微任务原理解析

    JavaScript事件循环及宏任务微任务原理解析 在学习 JavaScript 过程中,事件循环机制是必须要掌握的知识点之一。本文将详细介绍 JavaScript 事件循环机制的原理,以及宏任务和微任务的概念及异同点,其中包含两个示例说明。 事件循环机制的原理 JavaScript 是单线程执行的,意味着同一时间只能执行一段代码。然而在 Web 世界中,我…

    JavaScript 2023年6月11日
    00
  • 收藏Javascript中常用的55个经典技巧

    收藏Javascript中常用的55个经典技巧 介绍 本文收集了Javascript中常用的55个经典技巧,每个技巧都包含简短的代码示例和详细的解释。这些技巧旨在帮助Javascript开发者提高他们的编程技能。 主要内容 以下是本文中包含的55个Javascript技巧: 数组去重 javascriptconst arr = [1, 2, 3, 3, 4,…

    JavaScript 2023年5月18日
    00
  • JS实用的带停顿的逐行文本循环滚动效果实例

    让我来为您详细讲解“JS实用的带停顿的逐行文本循环滚动效果实例”的完整攻略。 简介 “带停顿的逐行文本循环滚动效果”是一种常见的滚动技术,可以使网页的文本内容呈现出逐行滚动的效果,并可通过设置停顿时间来实现滚动效果的调节。本文将介绍如何使用JavaScript实现这种效果。 实现步骤 HTML结构 首先,我们需要定义一个HTML结构用于承载逐行滚动的内容。下…

    JavaScript 2023年6月11日
    00
  • C#如何使用Bogus创建模拟数据示例代码

    C#是一种广泛应用于Web开发和Windows桌面应用程序的编程语言。Bogus是一个数据生成库,允许开发人员使用此库来创建虚假数据,用于测试和其他目的。本文将详细介绍如何使用Bogus来创建模拟数据,并提供示例代码。 安装Bogus库 首先,我们需要通过NuGet包管理器安装Bogus库。打开Visual Studio,在解决方案资源管理器中右键单击项目并…

    JavaScript 2023年5月28日
    00
  • JavaScript脚本库编写的方法

    JavaScript脚本库指的是封装了一组常用功能的JavaScript代码集合,供其他开发者在需要时直接调用使用。编写JavaScript脚本库的方法有以下几步: 1.明确需求 在编写JavaScript脚本库之前,需要先明确具体需求。例如,需要实现一组日期操作方法、DOM操作方法、数据类型判断方法等。 2.编写代码 在明确需求后,根据需求编写对应的Jav…

    JavaScript 2023年5月27日
    00
  • js正则test匹配的踩坑及解决

    下面是“js正则test匹配的踩坑及解决”的完整攻略。 1. 什么是正则表达式 正则表达式(Regular Expression)是一种用来描述特定模式的字符串,在JavaScript中通常用来匹配字符串中的字符模式。正则表达式在处理字符串时非常实用,常常用于表单验证、文本替换等等。其中,RegExp对象是用来支持正则表达式的JavaScript内置对象。 …

    JavaScript 2023年6月10日
    00
  • 浅谈类似于(function(){}).call()的js语句

    类似于 (function(){}).call() 的 JS 语句通常被称为自执行函数,在 JavaScript 中被广泛使用。下面是这种语句的详细讲解。 1. 什么是自执行函数 自执行函数是一个在定义时立即执行的函数。它可以被写作以下两种形式之一: (function() { // 函数体 })(); // 或者 (function() { // 函数体 …

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部