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

yizhihongxing

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本地数据存储sessionStorage与localStorage使用详解

    JavaScript本地数据存储sessionStorage与localStorage使用详解 什么是本地数据存储 在Web开发中,我们通常需要在前端与后端进行数据交互。但是,有些数据可能并不需要在后端进行处理,只需要在前端进行维护。这时本地数据存储就变得非常有用了。 本地数据存储是指将数据保存在浏览器本地而不是后端服务器上。利用本地数据存储框架,我们可以在…

    JavaScript 2023年6月11日
    00
  • javascript函数命名的三种方式及区别介绍

    对于“javascript函数命名的三种方式及区别介绍”,可以从以下三种方式展开讲解: 第一种方式:函数声明 使用函数声明语句来创建函数,这是最常见的一种函数命名方式,也是最容易理解的方式。 函数声明的基本结构如下: function functionName() { //函数体 } 示例: function greeting() { console.log…

    JavaScript 2023年5月27日
    00
  • 前端面试之对安全防御的理解分析

    前言 在前端开发领域中,安全防御一直是非常重要的一个方面。因为web应用程序是非常容易受到攻击的,如果没有恰当的安全措施,可能会导致各种问题,如身份盗窃、数据泄露、远程执行代码等。 在进行前端面试时,关于安全防御的理解和分析,是一个非常常见的问题。因此,在本篇攻略中,我将从多个角度对前端安全防御进行分析和讲解,帮助大家更好地理解前端安全防御的重要性和实现方式…

    JavaScript 2023年6月10日
    00
  • javascript条件式访问属性和箭头函数介绍

    下面我将为您详细讲解“JavaScript条件式访问属性和箭头函数介绍”的完整攻略。 JavaScript条件式访问属性 1. 定义 条件式访问属性是一种在对象中访问属性的技术,可以更简洁地检查对象和属性是否存在,以避免出现 undefined 和 TypeError。 2. 示例 以下是一种常规方式来检查对象的属性和属性是否存在: if (obj &amp…

    JavaScript 2023年5月18日
    00
  • js之事件冒泡和事件捕获详细介绍

    下面我将给出关于”js之事件冒泡和事件捕获详细介绍”的完整攻略。 什么是事件冒泡和事件捕获 在JavaScript中,事件处理程序可以直接绑定在DOM元素上。当事件被触发时,事件会从目标元素开始向外传播,这就是事件的冒泡和捕获。 事件冒泡是指事件从子元素传递到父元素,直到传递到最外层的元素(也就是window对象)。例如,当单击一个button元素时,单击事…

    JavaScript 2023年5月28日
    00
  • js 函数的执行环境和作用域链的深入解析

    JS 函数的执行环境和作用域链的深入解析 1. 执行环境 在 JavaScript 中,执行环境是指一段可执行代码的运行环境,有全局执行环境和函数执行环境两种。 全局执行环境 全局执行环境是在浏览器中直接打开网页时就会创建的执行环境,它是最顶层的环境。全局执行环境中定义的变量和函数被称为全局变量和全局函数,它们可以在程序的任何地方被访问和修改。 示例代码: …

    JavaScript 2023年6月10日
    00
  • JavaScript严格模式详解

    JavaScript严格模式详解 什么是JavaScript严格模式? JavaScript严格模式(Strict Mode),是一种更加安全和严谨的JavaScript编程模式。它主要的目的是消除Javascript语法的一些不合理、不严谨之处,减少与JavaScript引擎的冲突,并且对JavaScript中的一些不安全操作进行了限制。 当我们在开发中将…

    JavaScript 2023年6月10日
    00
  • JavaScript获取客户端IP的方法(新方法)

    JavaScript获取客户端IP的方法(新方法)攻略 在Web开发中,有时候需要获取客户端IP地址以便进行位置定位、用户分析等用途。本攻略将详细讲解使用JavaScript获取客户端IP的方法。 一、使用第三方服务API 我们可以通过调用第三方服务API的方式获取客户端IP地址。其中比较常用的是 ipify,它提供了简单易用、速度快、支持IPv6等特点。 …

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