PHP+Ajax+JS实现多图上传

yizhihongxing

下面我将为您详细讲解“PHP+Ajax+JS实现多图上传”的完整攻略。

总体思路

实现多图上传,我们需要通过Ajax技术将多张图片逐一传递到服务器端,再通过PHP将图片保存到指定目录中。下面是详细的步骤:

  1. 使用HMTL5的file类型的input框架,在客户端实现图片上传。
  2. 使用JavaScript遍历的方式,依次将图片上传到服务器端。
  3. JavaScript调用Ajax技术,将图片文件传递给服务器端。
  4. 服务器端接收Ajax传递过来的图片文件并保存到指定目录。
  5. 将上传结果以JSON格式返回给客户端。

示例1

以下是一个简单但完整的多图上传示例,前端使用原生HTML5+JS,后端使用PHP实现。

前端代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>多图上传示例</title>
</head>
<body>
  <input type="file" id="file" name="file" multiple>
  <button type="button" onclick="upload()">上传</button>
  <div id="result"></div>

  <script>
  function upload() {
    var files = document.getElementById('file').files;
    var formData = new FormData();
    for (var i = 0; i < files.length; i++) {
      formData.append('file[]', files[i]);
    }

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4 && xhr.status == 200) {
        var result = JSON.parse(xhr.responseText);
        var div = document.getElementById('result');
        div.innerHTML = '';
        for (var i = 0; i < result.length; i++) {
          div.innerHTML += '<img src="' + result[i] + '">';
        }
      }
    };
    xhr.open('POST', 'upload.php');
    xhr.send(formData);
  }
  </script>
</body>
</html>

后端代码:

<?php
$allowedExts = array('jpg', 'jpeg', 'gif', 'png');
$uploadDir = 'uploads/';
$uploadedFiles = array();
foreach ($_FILES['file']['name'] as $key => $name) {
  $tmp_name = $_FILES['file']['tmp_name'][$key];
  $extension = substr($name, strrpos($name, '.') + 1);
  if (!in_array($extension, $allowedExts)) {
    continue;
  }
  $filePath = $uploadDir . uniqid() . '.' . $extension;
  if (move_uploaded_file($tmp_name, $filePath)) {
    array_push($uploadedFiles, $filePath);
  }
}
echo json_encode($uploadedFiles);
?>

示例2

下面是使用jQuery实现的多图上传示例。

前端代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>多图上传示例</title>
  <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
  <input type="file" id="file" name="file" multiple>
  <button type="button" onclick="upload()">上传</button>
  <div id="result"></div>

  <script>
  function upload() {
    var formData = new FormData();
    $('input[type=file]').each(function() {
        var files = this.files;
        for (var i = 0; i < files.length; i++) {
          formData.append('file[]', files[i]);
        }
    });
    $.ajax({
      url: 'upload.php',
      type: 'POST',
      data: formData,
      dataType: 'json',
      processData: false,
      contentType: false,
      success: function(result) {
        var div = $('#result');
        div.empty();
        for (var i = 0; i < result.length; i++) {
          div.append('<img src="' + result[i] + '">');
        }
      }
    });
  }
  </script>
</body>
</html>

后端代码和示例1相同。

希望这份攻略能对您有所帮助!

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

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

相关文章

  • js css+html实现简单的日历

    下面是详细讲解“js css+html实现简单的日历”的完整攻略: 简介 在网页中添加日历是非常常见的需求。我们可以通过使用 HTML、CSS 和 JavaScript 来轻松制作一个基本的日历。其中,HTML 负责构建页面结构,CSS 实现样式美化,JavaScript 则用来处理各种交互和逻辑。 实现方法 1. HTML 结构 我们先来设立一个基本的 H…

    JavaScript 2023年5月27日
    00
  • js实现div拖动动画运行轨迹效果代码分享

    关于“js实现div拖动动画运行轨迹效果代码分享”的完整攻略,主要包含以下几个部分: 基本思路 实现步骤 示例说明 基本思路 实现div拖动动画运行轨迹效果,一般可以采用JS和CSS配合的方式。具体来说,主要实现以下几个步骤: 给div绑定mousedown事件,当鼠标按下时触发。 给document绑定mousemove事件,当鼠标移动时触发。 给docu…

    JavaScript 2023年6月10日
    00
  • jquery validate添加自定义验证规则(验证邮箱 邮政编码)

    以下是关于jquery validate添加自定义验证规则的完整攻略。 什么是jquery validate? jQuery validate是一个基于jQuery的表单验证插件,它可以对表单中的各类数据进行校验,从而帮助我们减少了客户端数据校验的代码量,提高了开发效率。 如何添加自定义验证规则? jquery validate插件提供了丰富的内置验证规则,…

    JavaScript 2023年6月10日
    00
  • Ajax异步请求的五个步骤及实战案例

    下面我来详细讲解一下“Ajax异步请求的五个步骤及实战案例”的完整攻略。 一、Ajax异步请求的五个步骤 1. 创建Ajax对象 使用JavaScript原生方式创建Ajax对象,可以使用XMLHttpRequest对象,也可以使用ActiveXObject。 2. 设置请求方式和请求地址 通过Ajax对象的open方法设置请求方式和请求地址,请求方式有GE…

    JavaScript 2023年6月11日
    00
  • js数组与字符串的相互转换方法

    为了让您更好地理解js数组与字符串的相互转换方法,我将提供以下步骤和示例: 将字符串转换为数组 方法1:使用split()函数将字符串转换为数组 使用split()函数可以将一个字符串根据指定分隔符分割成多个字符串,然后返回一个数组。 示例1: 假设有一个字符串str,其内容为”Hello,world! My name is Jack.”,现在我们需要将其按…

    JavaScript 2023年5月27日
    00
  • javascript 正则替换 replace(regExp, function)用法

    当我们使用JavaScript时,我们经常会用到字符串操作,而正则表达式则是字符串操作中不可或缺的一部分。其中,replace()函数是JavaScript中操作字符串非常重要的函数,它可以完成字符串中的替换操作。replace()函数的第一个参数可以是一个正则表达式,也可是普通的字符串,第二个参数则可以是另一个字符串或函数。在本篇文章中,我们将重点讲解使用…

    JavaScript 2023年6月10日
    00
  • JS事件循环机制event loop宏任务微任务原理解析

    接下来我会详细讲解一下JS事件循环机制(event loop)、宏任务和微任务的原理,以及该如何理解它们之间的关系。 1. 事件循环机制(event loop)的原理 在JavaScript中,事件循环机制定义了一种代码执行模型,可以控制代码在何时执行。事件循环机制主要分为以下两个部分: 执行栈(Execution Context Stack) 任务队列(T…

    JavaScript 2023年6月11日
    00
  • 10行原生JS实现文字无缝滚动(超简单)

    当根据文章中提供的攻略,我们可以用不到十行的原生JS代码实现文字无缝滚动的效果。下面逐步解读这个攻略的实现过程: 第一步:获取DOM元素 首先,需要获取到需要滚动的文字所在的DOM元素。这可以通过document.querySelector()方法来获取。在示例中,需要滚动的文字是包含在一个<div>元素中的,其class为scroll-wrap…

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