js实现动态添加上传文件页面

yizhihongxing

实现动态添加上传文件页面,可以通过以下几个步骤完成:

  1. HTML部分

首先,在HTML文件中,提供一个用于点击后触发上传文件对话框的按钮,并准备一个div容器,用于动态添加上传文件表单:

<button id="addFileBtn">添加上传文件</button>
<div id="fileForms"></div>
  1. JS部分

接下来,我们需要编写Javascript代码,实现动态添加上传文件表单。具体实现步骤如下:

  • 当用户点击“添加上传文件”按钮时,我们会通过createElement方法,动态创建一个表单,并将其添加到指定的容器中:
const fileFormsContainer = document.getElementById("fileForms");

document.getElementById("addFileBtn").addEventListener("click", function () {
  // 创建一个文件上传表单
  const fileForm = document.createElement("form");
  fileForm.setAttribute("method", "post");
  fileForm.setAttribute("enctype", "multipart/form-data");

  // 创建文件上传输入框
  const fileInput = document.createElement("input");
  fileInput.setAttribute("type", "file");
  fileInput.setAttribute("name", "file");
  fileInput.setAttribute("required", "true");

  // 创建提交按钮
  const submitBtn = document.createElement("button");
  submitBtn.setAttribute("type", "submit");
  submitBtn.innerText = "上传";

  // 将文件上传输入框和提交按钮添加到文件上传表单中
  fileForm.appendChild(fileInput);
  fileForm.appendChild(submitBtn);

  // 将文件上传表单添加到文件上传表单容器中
  fileFormsContainer.appendChild(fileForm);
});
  • 当用户选择文件并点击提交按钮时,我们会通过fetch方法将文件上传到服务器:
// 监听文件上传表单的submit事件
fileForm.addEventListener("submit", function (event) {
  event.preventDefault();

  const formData = new FormData(fileForm);
  fetch("upload.php", {
    method: "POST",
    body: formData,
  })
    .then((res) => res.json())
    .then((data) => {
      console.log(data);
    })
    .catch((err) => {
      console.error(err);
    });
});

在上述代码中,我们将文件上传表单的submit事件阻止(event.preventDefault()),并使用FormData对象获取表单中上传的文件。然后,我们通过fetch方法将文件上传到服务器,并在上传成功后,打印出服务器返回的响应数据(使用了promises)。

  • 服务器端代码

最后,我们需要在服务器端,接收并处理文件上传请求。下面是一个简单的PHP文件上传代码示例:

<?php
$uploadDir = "uploads/"; // 文件上传目录

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES["file"])) {
  $file = $_FILES["file"];
  $fileName = $file["name"];
  $filePath = $uploadDir . $fileName;

  // 将文件上传到指定目录
  if (move_uploaded_file($file["tmp_name"], $filePath)) {
    echo json_encode(["status" => "success"]);
  } else {
    echo json_encode(["status" => "error"]);
  }
}
?>

在上述代码中,我们首先定义了上传文件的保存目录($uploadDir),然后判断请求方法是否为POST,并且是否上传了文件。如果满足条件,我们就将文件保存到指定目录中,并通过json_encode方法,将上传结果返回给前端页面。

至此,我们就完成了动态添加上传文件页面的实现。此时,当用户点击“添加上传文件”按钮时,就会动态创建一个上传文件表单,并提供上传文件功能。用户可以通过这个表单,上传自己的文件。

示例1:

首先,我们在HTML页面中,添加一个用于接收上传文件结果的<div>元素:

<button id="addFileBtn">添加上传文件</button>
<div id="fileForms"></div>

<div id="uploadResult"></div>

然后,在Javascript代码中,我们可以将服务器返回的上传结果,动态显示在上述<div>元素中:

.then((data) => {
  const resultDiv = document.getElementById("uploadResult");
  resultDiv.innerText = data.status;
})

示例2:

除了上传文件功能,我们还可以为上传文件表单,添加其他的自定义功能。例如,在下面的示例中,我们为每个上传文件表单,添加了一个删除按钮,用户可以点击该按钮,删除对应的上传文件表单:

const fileFormsContainer = document.getElementById("fileForms");

document.getElementById("addFileBtn").addEventListener("click", function () {
  // 创建一个文件上传表单
  const fileForm = document.createElement("form");
  fileForm.setAttribute("method", "post");
  fileForm.setAttribute("enctype", "multipart/form-data");

  // 创建文件上传输入框
  const fileInput = document.createElement("input");
  fileInput.setAttribute("type", "file");
  fileInput.setAttribute("name", "file");
  fileInput.setAttribute("required", "true");

  // 创建提交按钮和删除按钮
  const submitBtn = document.createElement("button");
  submitBtn.setAttribute("type", "submit");
  submitBtn.innerText = "上传";

  const deleteBtn = document.createElement("button");
  deleteBtn.setAttribute("type", "button");
  deleteBtn.innerText = "删除";
  deleteBtn.addEventListener("click", function () {
    fileFormsContainer.removeChild(fileForm);
  });

  // 将文件上传输入框、提交按钮和删除按钮添加到文件上传表单中
  fileForm.appendChild(fileInput);
  fileForm.appendChild(submitBtn);
  fileForm.appendChild(deleteBtn);

  // 将文件上传表单添加到文件上传表单容器中
  fileFormsContainer.appendChild(fileForm);
});

在上述代码中,我们为每个上传文件表单,添加了一个“删除”按钮,并通过addEventListener方法,为该按钮添加了“点击删除”事件的处理函数。当用户点击“删除”按钮时,相应的上传文件表单,就会被从文件上传表单容器中删除。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现动态添加上传文件页面 - Python技术站

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

相关文章

  • js将json格式的对象拼接成复杂的url参数方法

    当我们需要向服务器发送一个API请求时,通常会将参数拼接在URL的末尾,这些参数可能来自于用户输入、配置文件、API返回的数据等。而如果参数很多或者有多层嵌套结构,手动拼接URL会变得非常麻烦。这时候,可以使用JavaScript将JSON格式的对象拼接成复杂的URL参数字符串。 方法一:手写递归函数 以下是手写递归函数的示例代码: function bui…

    JavaScript 2023年5月27日
    00
  • Yii实现单用户博客系统文章详情页插入评论表单的方法

    实现单用户博客系统文章详情页插入评论表单的方法,可以通过以下步骤来完成: 第一步:创建表结构 首先需要设计评论表的表结构。我们可以创建一个名为“comment”的表,其中包含以下字段: id:评论id,主键,自增 article_id:所评论的文章id,外键,关联文章表 content:评论内容 created_at:创建时间 updated_at:更新时间…

    JavaScript 2023年6月11日
    00
  • js 获取本地文件及目录的方法(推荐)

    当我们需要在JavaScript中获取本地文件或目录时,可以通过File API实现。File API是一组用于读取本地文件的JavaScript接口。 下面是使用File API获取本地文件及目录的步骤: 1. 创建一个input元素 <input type="file" id="input-element"&…

    JavaScript 2023年5月27日
    00
  • 前端中的JS使用调试技巧

    下面介绍一下“前端中的JS使用调试技巧”的完整攻略: 检查代码 在JS开发过程中,一些普遍的错误是输错单词,缺少/多写了一个符号,语法错误等。这些问题都可以通过检查代码来解决。下面是一些检查代码的技巧: 1. 使用Console 使用Console进行 debug 是最基本的调试方法之一。Console 是一个在浏览器中开发人员工具里的选项卡,它允许开发人员…

    JavaScript 2023年5月18日
    00
  • Js中setTimeout()和setInterval() 何时被调用执行的用法

    当我们写JavaScript代码时,经常需要用到定时器来调用一些方法或者函数。其中,setTimeout()和setInterval()就是两个常用的方法。在此,我将向你详细讲解它们的用法及何时被调用执行。 setTimeout() setTimeout()方法用于在指定的时间后执行给定的代码。它的语法格式如下: setTimeout(function, d…

    JavaScript 2023年6月11日
    00
  • js几个不错的函数 $$()

    当我们在操作 DOM 元素时,选择器是一个非常重要的部分。虽然在实现选择器时,使用 querySelector() 和 querySelectorAll() 不是最佳选择,但它们确实是使用最频繁的选择器。 然而,现在有一个新兴的 DOM 选择器,即 $$() 函数,它是一个 querySelectorAll() 的别名。虽然在一些场景下不如 querySel…

    JavaScript 2023年5月27日
    00
  • JavaScript实现cookie的操作

    下面是详细讲解 JavaScript 实现 Cookie 操作的攻略。 什么是 Cookie Cookie(中文翻译为“网页 Cookie”或者“浏览器 Cookie”)是网站为了辨别用户身份的一种标识,是存在用户本地终端上的数据。Cookie 是小型文本文件,由网站服务器发送给用户浏览器,浏览器会将其存储在本地,之后每次请求该网站时都会携带该 Cookie…

    JavaScript 2023年6月11日
    00
  • Java基础之List内元素的排序性能对比

    Java基础之List内元素的排序性能对比 在Java中,我们经常需要对List中的元素进行排序,但不同的排序算法对于不同的元素数量和类型,性能表现并不相同。本篇文章将对Java中常见的三种排序算法进行性能测试和对比,帮助开发者在选择排序算法时能够更好地权衡性能和时间复杂度。 常见的排序算法 在Java中,常见的排序算法有以下三种: 冒泡排序 插入排序 快速…

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