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 的日期选择器库。其中,moment.js 是一个自动解析、验证、操作和显示日期和时间的库,非常常用且功能强大。 <!– 引入moment.js和相关的CSS样式表文件 –&…

    JavaScript 2023年5月27日
    00
  • JavaScript中操作字符串小结

    下面是对于“JavaScript中操作字符串小结”的完整攻略: JavaScript字符串操作小结 在JavaScript中,字符串是一种表示文本的数据类型。当我们想要在编程中操作文本数据时,字符串就成为了非常重要的一种数据类型。同时,JavaScript也提供了很多方便的API来帮助我们处理字符串。本文将会总结一些常用的字符串操作方法,帮助大家高效地处理字…

    JavaScript 2023年5月18日
    00
  • 一次围绕setTimeout的前端面试经验分享

    一次围绕 setTimeout 的前端面试经验分享 问题 题目:实现一个函数 delay(fn, time),该函数接收一个函数和一个时间参数,返回一个新的函数,在调用这个新函数时,会在指定的时间之后执行传入的原函数。 思路:使用 setTimeout 函数来实现该功能。 代码 function delay(fn, time) { return functi…

    JavaScript 2023年6月10日
    00
  • JavaScript计时器用法分析【setTimeout和clearTimeout】

    JavaScript计时器用法分析【setTimeout和clearTimeout】 计时器是JavaScript中重要的一个组成部分,它允许您在预定的时间间隔内重复或延迟执行代码块。在本文中,我们将详细分析JavaScript中的计时器——setTimeout和clearTimeout的用法。 setTimeout setTimeout是一种计时器,它允许…

    JavaScript 2023年6月11日
    00
  • elementui源码学习仿写el-collapse示例

    elementui源码学习是提高前端技能的重要途径之一,而仿写el-collapse示例则是学习elementui源码的一种方式。下面是详细的攻略,在实践中应当充分理解和熟悉每一个步骤。 准备工作 首先要准备好编程环境,推荐使用VS Code或WebStorm等开发工具。下载elementui源码,可以从GitHub上下载或者使用npm安装。首先安装elem…

    JavaScript 2023年6月10日
    00
  • 送你43道JS面试题(收藏)

    下面我将详细讲解“送你43道JS面试题(收藏)”的完整攻略。 简介 该攻略是作者搜集并整理的 43 道 JS 面试题,旨在帮助 JS 开发者更好地准备面试。这 43 道面试题涵盖了 JS 的各个方面,包括变量、类型、函数、原型、闭包、异步等等内容。如果你能够顺利地回答这些问题,那么你的 JS 基础将会非常扎实。 使用方法 首先,你需要下载压缩包并解压。 进入…

    JavaScript 2023年5月28日
    00
  • PHP使用正则表达式获取微博中的话题和对象名

    使用正则表达式获取微博中的话题和对象名是一个常见的需求,本篇攻略将详细介绍如何使用PHP实现这一功能。 步骤一:获取微博内容 首先,我们需要获取微博的内容。可以使用curl等工具,通过API或者爬虫获取微博的HTML源代码。在本例中,我们使用curl来获取微博的HTML源代码。 $ch = curl_init(); curl_setopt($ch, CURL…

    JavaScript 2023年6月10日
    00
  • js 字符串操作函数

    下面是针对“js字符串操作函数”的详细攻略。 常用字符串操作函数 1.字符串长度 JavaScript中获取字符串长度的方式是通过字符串对象的length属性来实现的。 const str = "hello world"; console.log(str.length); // 11 2.字符串查找 在JavaScript中,字符串对象有…

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