上面的代码片段呈现了一个矩形容器,我们可以在其中粘贴文件。该容器有一个名为 contenteditable 的属性,设置为 true。 contenteditable 属性对于启用容器中的文件或任何其他项目的粘贴非常重要。如果 contenteditable 属性更改为 false 或删除,粘贴操作将无法按预期工作。我们还有一个ID为preview的容器。我们将使用预览容器来预览用户粘贴的图像。

让我们从 style.css 添加一些基本样式到我们的标记中

*{    font-family: Arial, Helvetica, sans-serif;}body{    text-align: center;    margin-block-start: 4rem;}#pasteArea {    border: 2px dashed #ccc;    padding: 20px;    width: 300px;    height: 200px;    display: flex;    align-items: center;    justify-content: center;    text-align: center;    cursor: pointer;    margin: auto;    color: rgb(5, 89, 89);}#preview img {    max-width: 100%;    margin-top: 10px;}

上面的标记和样式表创建了一个简单的破折号边框容器,其中包含简单的提示文本,如下面的屏幕截图所示:

\\\"Implementing

现在我们已经创建了 UI,让我们在下一节中使用 JavaScript 添加一些有用的功能。

剧本

在本节中,我们将使用 JavaScript 将粘贴事件侦听器添加到粘贴区域。在从 DOM 获取粘贴区域以附加事件侦听器之前,我们首先等待 DOM 内容加载,如下面的代码片段所示。

document.addEventListener(\\'DOMContentLoaded\\', () => {    const pasteArea = document.querySelector(\\'#pasteArea\\');    pasteArea.addEventListener(\\'paste\\', (event) => {    });});

在上面的代码片段中,我们添加了 DOMContentLoaded 事件的监听器。这使得我们可以等待 DOM 树创建后才能获取 DOM 元素。接下来,我们选择粘贴区域容器并向其附加粘贴事件侦听器。

从粘贴的项目中获取文件

粘贴事件处理程序在前面的代码片段中未实现。让我们通过从事件对象获取数据并将它们记录在控制台中来实现它。我们将在本文后面对数据进行更多处理,目前,我们只想确保在将项目粘贴到粘贴区域时接收到文件。下面的代码片段显示了粘贴事件处理程序的最小实现。

pasteArea.addEventListener(\\'paste\\', (event) => {        const items = event.clipboardData.items        for (const item of items) {            if (item.kind === \\'file\\') {                const file = item.getAsFile()                console.log(file)            }        }    })

在上面的代码片段中,我们从 event.clipboardData 对象获取项目。 event.clipboardData.items 是一个 DataTransferItemList,它是一个包含粘贴项目内容的类似列表的对象。这些项目存储在列表中,因为用户可以一次复制和粘贴多个项目。

接下来,我们使用 for ...of 循环迭代项目。在循环中,我们检查每个项目是否是一个文件。如果该项目是国王“文件”,我们将其作为文件获取并将其打印在浏览器的控制台上。

在控制台上打印文件信息对于网页的用户来说并不是很有用。让我们在下一节中做一些更有趣的事情。

预览上传的文件

如果我们不在任何地方显示它,那么在将项目粘贴到剪贴板后,用户将很难知道文件上传是否成功。通过显示指示成功的内容来表明文件已成功上传非常重要。还有什么比显示上传文件本身更好的指示上传成功的方法呢?

在本节中,我们将扩展粘贴事件处理程序以从接收到的文件创建 URL。文件加载到浏览器后,我们将使用创建的 URL 来呈现该文件。我们将利用 FileReader API 从文件创建 URL,如下面代码段中的代码所示。

pasteArea.addEventListener(\\'paste\\', (event) => {        const items = event.clipboardData.items        for (const item of items) {            if (item.kind === \\'file\\') {                const file = item.getAsFile()                const reader = new FileReader();                reader.onloadend = (e) => {                    const url = e.target.result                    console.log(url)                };                reader.readAsDataURL(file);            }        }    });

在上面的代码片段中,我们创建了 FileReader 的实例并使用它来生成数据 URL。我们还向 FileReader 对象附加了一个 loadend 事件侦听器,我们将读取结果记录到控制台。这是预览文件的第一步,我们现在可以使用 URL 来显示文件。

假设用户粘贴了图像文件,以下代码片段显示了我们如何扩展事件处理程序以创建 URL 并显示图像文件。

 reader.onloadend = (e) => {       const url = e.target.result       const preview = document.querySelector(\\'#preview\\')       const img = document.createElement(\\'img\\');       img.src = url;       preview.appendChild(img);   };

在上面的代码片段中,我们从 DOM 获取预览容器并创建一个 img 元素来渲染图像。我们将创建的 URL 指定为图像的 src,并将图像附加到预览容器中。将图像附加到预览容器后,用户现在可以知道他们粘贴的图像已成功加载到网页中。

成功!我们已经成功地在网页上实现了通过复制粘贴的方式上传文件。这种文件上传方式使用户能够轻松上传文件,无需点击几个按钮来选择要上传的文件。 ClipboadEvent 接口提供了一种从浏览器上粘贴的项目收集数据的简单方法。 FileReader 接口允许我们从上传的文件创建 URL 并使用它来预览上传的文件。

欢迎在评论区畅所欲言。从 MDN 查找有关 ClipBoardEvent 和 FileReader 接口的更多信息。

","image":"http://www.luping.net","datePublished":"2024-07-30T20:54:02+08:00","dateModified":"2024-07-30T20:54:02+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在Web上实现文件复制粘贴输入

在Web上实现文件复制粘贴输入

发布于2024-07-30
浏览:568

在Web开发领域,收集用户输入时上传文件的方式有多种。其中一种方法是复制粘贴。文件输入的复制粘贴是一种非常直观的用户上传文件的方法。复制粘贴文件输入方法使用户无需记住要上传的文件的位置。在本文中,我们将讨论如何在您的网站上实现通过复制粘贴的方式输入文件。

我们将利用 ClipboadEvent 和 EventTarget 接口来实现复制粘贴文件输入。 ClipboardEvent接口提供了有关粘贴事件的信息,EventTarget接口允许我们监听粘贴事件。

在侦听粘贴事件时,我们将附加一个事件处理函数,在其中决定如何处理粘贴的项目。在我们的例子中,我们将获取粘贴的文件并在其完全加载到浏览器中后立即渲染它。我们将从 HTML 和样式开始。

HTML 和样式

让我们首先创建粘贴区域的 HTML 标记。下面的代码片段是 HTML 标记:



    Copy-Paste File Input
Paste your file here

上面的代码片段呈现了一个矩形容器,我们可以在其中粘贴文件。该容器有一个名为 contenteditable 的属性,设置为 true。 contenteditable 属性对于启用容器中的文件或任何其他项目的粘贴非常重要。如果 contenteditable 属性更改为 false 或删除,粘贴操作将无法按预期工作。我们还有一个ID为preview的容器。我们将使用预览容器来预览用户粘贴的图像。

让我们从 style.css 添加一些基本样式到我们的标记中

*{
    font-family: Arial, Helvetica, sans-serif;
}

body{
    text-align: center;
    margin-block-start: 4rem;
}
#pasteArea {
    border: 2px dashed #ccc;
    padding: 20px;
    width: 300px;
    height: 200px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    cursor: pointer;
    margin: auto;
    color: rgb(5, 89, 89);
}

#preview img {
    max-width: 100%;
    margin-top: 10px;
}

上面的标记和样式表创建了一个简单的破折号边框容器,其中包含简单的提示文本,如下面的屏幕截图所示:

Implementing File Input By Copy-Paste on the Web

现在我们已经创建了 UI,让我们在下一节中使用 JavaScript 添加一些有用的功能。

剧本

在本节中,我们将使用 JavaScript 将粘贴事件侦听器添加到粘贴区域。在从 DOM 获取粘贴区域以附加事件侦听器之前,我们首先等待 DOM 内容加载,如下面的代码片段所示。

document.addEventListener('DOMContentLoaded', () => {
    const pasteArea = document.querySelector('#pasteArea');

    pasteArea.addEventListener('paste', (event) => {

    });
});

在上面的代码片段中,我们添加了 DOMContentLoaded 事件的监听器。这使得我们可以等待 DOM 树创建后才能获取 DOM 元素。接下来,我们选择粘贴区域容器并向其附加粘贴事件侦听器。

从粘贴的项目中获取文件

粘贴事件处理程序在前面的代码片段中未实现。让我们通过从事件对象获取数据并将它们记录在控制台中来实现它。我们将在本文后面对数据进行更多处理,目前,我们只想确保在将项目粘贴到粘贴区域时接收到文件。下面的代码片段显示了粘贴事件处理程序的最小实现。

pasteArea.addEventListener('paste', (event) => {
        const items = event.clipboardData.items
        for (const item of items) {
            if (item.kind === 'file') {
                const file = item.getAsFile()

                console.log(file)
            }
        }
    })

在上面的代码片段中,我们从 event.clipboardData 对象获取项目。 event.clipboardData.items 是一个 DataTransferItemList,它是一个包含粘贴项目内容的类似列表的对象。这些项目存储在列表中,因为用户可以一次复制和粘贴多个项目。

接下来,我们使用 for ...of 循环迭代项目。在循环中,我们检查每个项目是否是一个文件。如果该项目是国王“文件”,我们将其作为文件获取并将其打印在浏览器的控制台上。

在控制台上打印文件信息对于网页的用户来说并不是很有用。让我们在下一节中做一些更有趣的事情。

预览上传的文件

如果我们不在任何地方显示它,那么在将项目粘贴到剪贴板后,用户将很难知道文件上传是否成功。通过显示指示成功的内容来表明文件已成功上传非常重要。还有什么比显示上传文件本身更好的指示上传成功的方法呢?

在本节中,我们将扩展粘贴事件处理程序以从接收到的文件创建 URL。文件加载到浏览器后,我们将使用创建的 URL 来呈现该文件。我们将利用 FileReader API 从文件创建 URL,如下面代码段中的代码所示。

pasteArea.addEventListener('paste', (event) => {
        const items = event.clipboardData.items
        for (const item of items) {
            if (item.kind === 'file') {
                const file = item.getAsFile()


                const reader = new FileReader();

                reader.onloadend = (e) => {
                    const url = e.target.result
                    console.log(url)

                };
                reader.readAsDataURL(file);
            }
        }
    });

在上面的代码片段中,我们创建了 FileReader 的实例并使用它来生成数据 URL。我们还向 FileReader 对象附加了一个 loadend 事件侦听器,我们将读取结果记录到控制台。这是预览文件的第一步,我们现在可以使用 URL 来显示文件。

假设用户粘贴了图像文件,以下代码片段显示了我们如何扩展事件处理程序以创建 URL 并显示图像文件。

 reader.onloadend = (e) => {
       const url = e.target.result
       const preview = document.querySelector('#preview')
       const img = document.createElement('img');

       img.src = url;
       preview.appendChild(img);
   };

在上面的代码片段中,我们从 DOM 获取预览容器并创建一个 img 元素来渲染图像。我们将创建的 URL 指定为图像的 src,并将图像附加到预览容器中。将图像附加到预览容器后,用户现在可以知道他们粘贴的图像已成功加载到网页中。

成功!我们已经成功地在网页上实现了通过复制粘贴的方式上传文件。这种文件上传方式使用户能够轻松上传文件,无需点击几个按钮来选择要上传的文件。 ClipboadEvent 接口提供了一种从浏览器上粘贴的项目收集数据的简单方法。 FileReader 接口允许我们从上传的文件创建 URL 并使用它来预览上传的文件。

欢迎在评论区畅所欲言。从 MDN 查找有关 ClipBoardEvent 和 FileReader 接口的更多信息。

版本声明 本文转载于:https://dev.to/ghostaram/implementing-file-input-by-copy-paste-on-the-web-npb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Hexabot 设置和可视化编辑器教程:构建您的第一个 AI 聊天机器人
    Hexabot 设置和可视化编辑器教程:构建您的第一个 AI 聊天机器人
    聊天机器人爱好者大家好!在本教程中,我们将指导您完成设置和使用开源 AI 聊天机器人构建器 Hexabot 的过程。我们将首先克隆 GitHub 存储库、安装依赖项并为 Hexabot 配置环境变量。您还将学习如何使用 Docker 启动项目、访问管理面板以及使用可视化编辑器创建聊天机器人流程。 在...
    编程 发布于2024-11-02
  • mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_array():您应该选择哪一个?
    mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_array():您应该选择哪一个?
    mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_array() 解释背景:如果您正在使用已弃用的MySQL 扩展中,在从结果集中检索数据的 mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_...
    编程 发布于2024-11-02
  • Next.js - 概述
    Next.js - 概述
    本文作为初学者友好的指南和使用 Next.js 的步骤。 Next.js 是一个用于构建 Web 应用程序的灵活框架。相反,它是一个构建在 Node.js 之上的 React 框架。 设置您的 Next.js 项目 要启动新的 Next.js 项目,您需要在计算机上安装 Node.js。 安装 安装...
    编程 发布于2024-11-02
  • 如何在代码中使用 Unsplash 图片
    如何在代码中使用 Unsplash 图片
    作为一名从事新 SaaS 项目的开发人员,我需要直接通过 URL 链接一些 Unsplash 图像。 最初,我看到一篇推荐使用 https://source.unsplash.com/ API 的文章(链接)。但是,此方法不再有效,并且仅从 URL 字段复制链接并不能提供嵌入所需的直接图像 URL...
    编程 发布于2024-11-02
  • 如何合并关联数组、处理缺失键以及填充默认值?
    如何合并关联数组、处理缺失键以及填充默认值?
    合并多个关联数组并添加具有默认值的缺失列将关联数组与不同的键集组合起来创建统一的数组可能具有挑战性。这个问题探索了一种实现此目的的方法,所需的输出是一个数组,其中键被合并,缺失的列用默认值填充。为了实现这一点,建议结合使用 array_merge 函数精心设计的键数组:$keys = array()...
    编程 发布于2024-11-02
  • 通过 testcontainers-go 和 docker-compose 来利用您的测试套件
    通过 testcontainers-go 和 docker-compose 来利用您的测试套件
    Welcome back, folks! Today, we will cover the end-to-end tests in an intriguing blog post. If you've never written these kinds of tests or if you stri...
    编程 发布于2024-11-02
  • 以下是一些适合您文章的基于问题的标题:

**直接简洁:**

* **如何在Windows控制台中正确显示UTF-8字符?**
* **为什么传统方法无法显示
    以下是一些适合您文章的基于问题的标题: **直接简洁:** * **如何在Windows控制台中正确显示UTF-8字符?** * **为什么传统方法无法显示
    在 Windows 控制台中正确显示 UTF-8 字符使用传统方法在 Windows 控制台中显示 UTF-8 字符的许多尝试均失败正确渲染扩展字符。失败的尝试:使用 MultiByteToWideChar() 和 wprintf() 的一种常见方法被证明是无效的,只留下 ASCII 字符可见。此外...
    编程 发布于2024-11-02
  • ReactJS 的模拟介绍
    ReactJS 的模拟介绍
    ReactJS 19:重要部分 并发模式增强: ReactJS 19 中最大的改进是并发模式,它不仅在应用程序自身更新时保持 UI 平滑和响应灵敏,而且还确保了无缝界面,尤其是在复杂的过渡(例如动画)时。 改进的服务器组件: 在 Python 的引领下,ReactJ...
    编程 发布于2024-11-02
  • 首届DEV网页游戏挑战赛评委
    首届DEV网页游戏挑战赛评委
    我被要求对DEV团队9月份组织的第一届网页游戏挑战赛提交的参赛作品进行评判,结果在10月初发布。 我们几个月来一直在 DEV 上组织挑战(迷你黑客马拉松),并计划宣布我们的第一个网页游戏挑战。鉴于您在游戏社区 和 dev.to 的专业知识和参与度,我们想知道您是否有兴趣成为客座评委。 谁能对此说“不...
    编程 发布于2024-11-02
  • 购买经过验证的现金应用程序帐户:安全可靠的交易
    购买经过验证的现金应用程序帐户:安全可靠的交易
    Buying verified Cash App accounts is not recommended. It can lead to security risks and potential account bans. If you want to more information just k...
    编程 发布于2024-11-02
  • 为什么 `std::function` 缺乏相等比较?
    为什么 `std::function` 缺乏相等比较?
    揭开 std::function 的等式可比性之谜难题:为什么是 std::function,现代 C 代码库的一个组成部分,不具备相等比较功能?这个问题从一开始就困扰着程序员,导致管理可调用对象集合的混乱和困难。早期的歧义:在 C 语言的早期草案中11 标准中,operator== 和operat...
    编程 发布于2024-11-02
  • JavaScript 类型检查 |编程教程
    JavaScript 类型检查 |编程教程
    介绍 本文涵盖以下技术技能: 在本实验中,我们将探索一个 JavaScript 函数,该函数检查提供的值是否属于指定类型。我们将使用 is() 函数,它利用构造函数属性和 Array.prototype.includes() 方法来确定值是否属于指定类型。本实验将帮助您更好地了解 ...
    编程 发布于2024-11-02
  • 使用 Streamlit 将机器学习模型部署为 Web 应用程序
    使用 Streamlit 将机器学习模型部署为 Web 应用程序
    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 Excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们通常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构...
    编程 发布于2024-11-02
  • ## utf8_unicode_ci 与 utf8_bin:哪种 MySQL 排序规则最适合德国网站?
    ## utf8_unicode_ci 与 utf8_bin:哪种 MySQL 排序规则最适合德国网站?
    为德语选择最佳 MySQL 排序规则在设计为德语受众量身定制的网站时,支持像 ä、 ü 和 ß。当涉及特定于语言的要求时,排序规则的选择起着重要作用。字符集和排序规则对于字符处理,UTF-8 仍然是首选选项,提供广泛的字符支持。至于排序规则,需要考虑德语特定字符。排序规则类型MySQL 提供各种排序...
    编程 发布于2024-11-02
  • 异常处理基础知识
    异常处理基础知识
    Java中的异常处理由五个关键字管理:try、catch、 throw、throws和finally。 这些关键字构成了一个相互关联的子系统。 要监视的指令位于 try 块内。 如果try块中发生异常,则会抛出异常。 代码可以使用catch捕获并处理异常。 系统异常由Java运行时自动抛出。 要手...
    编程 发布于2024-11-02

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3