PHP+Ajax+JS实现多图上传

下面我将为您详细讲解“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日

相关文章

  • Javascript Math LN2 属性

    JavaScript中的Math.LN2属性是一个常数,表示自然对数中的2的对数值。以下是关于Math.LN2属性的完整攻略,包括两个示例。 JavaScript Math对象的LN2属性 JavaScript Math对象中的LN2属性是一个常数,表示自然对数中的2的对数值。 下面是LN2属性语法: Math.LN2 下面是一个LN2属性的示例: cons…

    JavaScript 2023年5月11日
    00
  • JavaScript前端超时异步操作完美解决过程

    JavaScript前端超时异步操作完美解决需要使用到Promise和async/await两种技术,下面我会分几个步骤来详细讲解: 第一步:了解问题 前端异步请求是常见的操作,但遇到超时问题需要进行特殊处理。通常情况下采用回调函数或者Promise来解决超时问题,但是它们都存在一些缺点,例如回调函数可能会导致回调地狱,而Promise虽然避免了回调地狱的问…

    JavaScript 2023年5月18日
    00
  • js实现随机抽奖

    下面是js实现随机抽奖的完整攻略: 目录 背景介绍 随机抽奖原理 实现过程 准备工作 代码逻辑 示例说明 示例一:随机抽取一名幸运儿 示例二:抽奖动画效果 背景介绍 随机抽奖是常见的一个功能,例如网站活动、抽奖游戏、公益机构等都有可能需要使用到此功能。本文将详细介绍如何使用JavaScript实现随机抽奖的功能。 随机抽奖原理 随机抽奖的实现原理比较简单,例…

    JavaScript 2023年6月11日
    00
  • JS 中在严格模式下 this 的指向问题

    JS 中的 this 表示函数执行时所在的上下文对象,在不同的情况下,this 指向的对象是不同的,这是 JS 中一个比较重要,也比较复杂的概念。 在严格模式下,this 指向的对象与非严格模式下不同。下面我们通过两个示例来详细讲解在严格模式下 this 的指向问题。 示例一 ‘use strict’; function showThis() { conso…

    JavaScript 2023年6月10日
    00
  • javascript学习笔记(十七) 检测浏览器插件代码

    下面我来详细讲解“javascript学习笔记(十七) 检测浏览器插件代码”的完整攻略。 什么是浏览器插件? 浏览器插件(Browser Plugin)是指在浏览器上运行的一种应用程序。它是通过在浏览器内部运行,提供给用户不同的功能。浏览器插件可以用来扩展浏览器的功能或者增加新的特性,比如广告拦截、图像滤镜等等。 如何检测浏览器插件? 在JavaScript…

    JavaScript 2023年6月10日
    00
  • JS 字符串特殊字符全部替换空

    1、方法 const formatStr = (str) => { const value = str.replace( /[`:_~!@#$%^&*() \+ =<>?”{}|, \/ ;’ \\ [ \] ·~!@#¥%……&*()—— \+ ={}|《》?:“”【】、;‘’,。、-]/g, ”, ) return v…

    JavaScript 2023年4月18日
    00
  • 详解JavaScript对象的深浅复制

    请参考以下完整攻略。 1. JavaScript对象的深浅复制 JavaScript中的对象赋值,涉及到两种复制方法:浅复制和深复制。 浅复制只复制变量对象本身及其属性的引用,针对基本数据类型是深复制,对于复杂数据类型则是浅复制。而深拷贝会完全复制原始对象和嵌套的所有对象,也就是说,新创建的对象与原始对象没有任何关联。 2. 浅复制 浅复制的实现方式有对象的…

    JavaScript 2023年5月27日
    00
  • safari cookie设置中文失败的解决方法

    当我们在Safari浏览器中设置中文的cookie时,可能会出现设置失败的情况。下面是解决方法的完整攻略,包含以下步骤: 1. 清除浏览器缓存 首先,在Safari浏览器中选择“偏好设置”,然后选择“隐私”面板。在这里,可以看到“移除所有网站数据”的选项。点击这个按钮,清除浏览器缓存。 2. 检查Safaricookie设置和时间误差 如果以上步骤没有解决问…

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