JS中FormData类实现文件上传

yizhihongxing

当需要上传文件时,可以使用JS中的FormData类来实现。下面是实现文件上传的完整攻略:

创建一个表单

首先,要在HTML中创建一个表单,指定具体的上传文件的路径和上传方法:

<form action="upload.php" method="post" enctype="multipart/form-data">
   <input type="file" name="file" />
   <input type="submit" value="上传文件" />
</form>

获取文件并发送请求

使用JavaScript获取上传文件,并发送请求,这里使用Fetch API来发送POST请求

<script>
   function uploadFile() {
      var formData = new FormData();
      var fileField = document.querySelector("input[type='file']");

      formData.append("file", fileField.files[0]);

      fetch('upload.php', {
         method: 'POST',
         body: formData
      })
      .then(response => response.json())
      .then(data => {
         console.log(data);
      })
      .catch(error => {
         console.error(error)
      })
   }
</script>

在上例中,我们首先创建了一个FormData实例formData,接着获取了input元素的第一个文件,将其作为参数传递给append()方法,最后通过Fetch API来发送POST请求并处理响应结果。

服务器端代码

上传的文件必须在服务器端进行处理。因此,在你的服务器端代码中需要有上传文件的处理逻辑。

PHP处理上传文件的代码示例如下:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件大小
if ($_FILES["file"]["size"] > 500000) {
    echo "文件过大,请重新上传";
    $uploadOk = 0;
}

// 检查文件类型
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "只允许上传 jpg, jpeg, png 和 gif 文件";
    $uploadOk = 0;
}

// 检查文件是否存在,并移动到指定目录
if ($uploadOk == 0) {
    echo "上传失败";
} else {
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo "文件成功上传到目录下:" . $target_file;
    } else {
        echo "上传失败";
    }
}
?>

在服务器端处理上传文件的逻辑中,我们检查了文件的大小和类型,并将上传的文件移动到指定目录下。如果上传文件成功,则返回文件上传成功信息,否则返回错误信息。

示例

下面是两个上传文件的示例。第一个示例将上传照片,并在上传成功后展示上传的照片。

<html>
   <body>
      <form action="upload_photo.php" method="post" enctype="multipart/form-data">
         <input type="file" name="file" id="file">
         <input type="submit" value="上传照片" onclick="uploadPhoto()">
      </form>
      <div id="photo"></div>
   </body>

   <script>
      function uploadPhoto() {
         var formData = new FormData();
         var fileField = document.querySelector("#file");

         formData.append("file", fileField.files[0]);

         fetch('upload_photo.php', {
            method: 'POST',
            body: formData
         })
         .then(response => response.json())
         .then(data => {
            console.log(data);
            let image = document.createElement('img');
            image.src = data.fileUrl;
            document.getElementById('photo').appendChild(image);
         })
         .catch(error => {
            console.error(error)
         })
      }
   </script>
</html>

第二个示例将上传音乐文件,并在上传成功后播放音乐文件。

<html>
   <body>
      <form action="upload_music.php" method="post" enctype="multipart/form-data">
         <input type="file" name="file" id="file">
         <input type="submit" value="上传音乐文件" onclick="uploadMusic()">
      </form>
      <audio id="musicPlayer" controls></audio>
   </body>

   <script>
      function uploadMusic() {
         var formData = new FormData();
         var fileField = document.querySelector("#file");

         formData.append("file", fileField.files[0]);

         fetch('upload_music.php', {
            method: 'POST',
            body: formData
         })
         .then(response => response.json())
         .then(data => {
            console.log(data);
            let musicPlayer = document.getElementById('musicPlayer');
            musicPlayer.src = data.fileUrl;
         })
         .catch(error => {
            console.error(error)
         })
      }
   </script>
</html>

在上传成功后,我们通过HTML5 Audio API来播放音乐文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中FormData类实现文件上传 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • react结合typescript 封装组件实例详解

    下面是 “react结合typescript 封装组件实例详解”的完整攻略。 一、为什么要使用TypeScript TypeScript 是 JavaScript 的一个超集,它可以为 JavaScript 提供类型检查和其他一些新特性。TypeScript 具有以下优点: 代码更加健壮,更容易维护。 更好的智能提示和 IDE 支持。 更容易对代码进行重构。…

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

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

    JavaScript 2023年5月27日
    00
  • js中eval详解

    JS中eval详解 eval 函数是 JavaScript 中的一个内置函数,它将字符串作为代码来解析和执行。这个函数通常被认为是危险的,因为它可以执行任何代码,包括恶意代码,从而导致安全风险。因此在使用 eval 函数时需要格外小心。 eval的语法 eval 函数的语法如下: eval(string) 其中,string 是一个字符串,可以包含任何有效的…

    JavaScript 2023年5月18日
    00
  • JS前端宏任务微任务及Event Loop使用详解

    JS前端宏任务、微任务及Event Loop使用详解 在JavaScript中,我们经常听到宏任务(Macro Task)、微任务(Micro Task)和Event Loop的概念。本文将详细讲解这些概念,以及它们在JavaScript中的使用。 1. 前置知识 在开始讲解之前,我们需要了解一些前置知识: JavaScript是单线程的,意味着任务只能一次…

    JavaScript 2023年6月11日
    00
  • javascript函数以及基础写法100多条实用整理

    JavaScript函数是一段可以被反复调用执行的代码,这种代码的主要作用是完成一个独立的功能。JavaScript函数具有很高的可重用性和灵活性,常被用来封装一些特定的处理逻辑以便于在需要的时候调用。接下来将为大家介绍JavaScript函数的基础写法,包括参数、返回值、作用域、闭包等内容。 Function基础写法 无参函数 无参函数即不接受任何参数的函…

    JavaScript 2023年5月18日
    00
  • js实现点击获取验证码倒计时效果

    下面是“js实现点击获取验证码倒计时效果”的完整攻略。 1. 编写HTML 在HTML中添加一个获取验证码的按钮和一个显示倒计时的区域,代码如下: <input type="button" value="获取验证码" id="btn" onclick="getCode()"…

    JavaScript 2023年6月11日
    00
  • JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)

    当我们需要把一个字符串按照某种规则分割成一个数组时,可以使用JavaScript字符串对象的split方法。本文将详细讲解JavaScript字符串对象split方法的使用方法。 split方法基本语法 split()方法的基本语法如下: string.split(separator, limit) 其中,separator参数为分隔符,可以是字符串或正则表…

    JavaScript 2023年5月27日
    00
  • JS数组方法shift()、unshift()用法实例分析

    JS数组方法shift()和unshift()是数组操作中非常常用的方法,两个方法都可以用于向数组的开头添加或删除元素,下面详细讲解这两个方法的用法及实例分析。 shift() 方法的用法及实例分析 shift()方法用于删除数组的第一个元素,并返回被删除的元素。 语法: array.shift() 参数说明: shift()方法不需要任何参数。 返回值: …

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