原生JS实现前端本地文件上传

当我们需要在前端实现文件上传的功能时,可以使用原生的JavaScript代码来实现。下面是一个完整的攻略,包含了前端上传文件需要用到的一些知识点。

1. 获取文件上传的节点

要上传文件,需要在页面上放置一个文件上传的节点,通常使用HTML中的<input type="file" />元素。获取节点的方式可以使用原生JavaScript中的 getElementById()方法或querySelector()方法。

<input type="file" id="uploadFile" accept=".txt" />
//使用getElementById()方法获取上传文件节点
const inputNode =  document.getElementById('uploadFile');

//使用querySelector()方法获取上传文件节点
const inputNode =  document.querySelector('#uploadFile');

accept属性是用来限制上传文件的类型。

2. 监听文件上传事件

要实现上传操作我们需要监听文件的上传事件,然后在事件触发时执行上传操作。

const inputNode = document.querySelector('#uploadFile');

inputNode.addEventListener('change', handleUpload);

function handleUpload (event) {
 //上传操作
}

3. 上传操作

获取选定的文件对象后,通过AJAX将文件上传到服务器。这里我们使用 XMLHttpRequest 对象来发送HTTP请求。

function handleUpload (event) {
  const file = event.target.files[0];
  const formData = new FormData();

  formData.append('file', file, file.name);

  const xhr = new XMLHttpRequest();

  xhr.open('POST', '/upload');

  xhr.onload = function () {
    console.log('上传成功!');
  };

  xhr.send(formData);
}

示例1

下面是一个使用原生JS实现以POST形式上传JSON文件的示例:

<!DOCTYPE html>
<html>
  <head>
    <title>前端上传文件</title>
  </head>
  <body>
    <input type="file" id="uploadFile" accept=".json" />
    <button id="submit">提交</button>

    <script>
      const inputNode = document.querySelector('#uploadFile');
      const submitBtn = document.querySelector('#submit');
      inputNode.addEventListener('change', handleUpload);

      function handleUpload (event) {
        const file = event.target.files[0];
        const formData = new FormData();  
        formData.append('file', file, file.name);

        submitBtn.addEventListener('click',function () {
          const xhr = new XMLHttpRequest();     
          xhr.open('POST', '/uploadData');        
          xhr.onload = function () {
            console.log('上传成功!');
          };
          xhr.send(formData);
        });
      }
    </script>
  </body>
</html>

服务端代码示例(使用Node.js):

const express = require('express');
const app = express();
const port = 3000;

const bodyParser = require('body-parser');
app.use(bodyParser.json());

const fs = require('fs');

app.post('/uploadData', (req, res) => { 
  const file = req.files.file;
  const savePath = './' + file.name;

  const data = JSON.parse(fs.readFileSync(file.path));
  fs.writeFileSync(savePath, JSON.stringify(data));

  res.send('文件上传成功!'); 
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

示例2

下面是一个使用原生JS实现以POST形式上传图片文件的示例:

<!DOCTYPE html>
<html>
  <head>
    <title>前端上传文件</title>
  </head>
  <body>
    <input type="file" id="uploadImage" accept="image/*"/>
    <button id="submit">提交</button>

    <script>
      const inputNode = document.querySelector('#uploadImage');
      const submitBtn = document.querySelector('#submit');
      inputNode.addEventListener('change', handleUpload);

      function handleUpload (event) {
        const file = event.target.files[0];
        const formData = new FormData();  
        formData.append('file', file, file.name);

        submitBtn.addEventListener('click',function () {
          const xhr = new XMLHttpRequest();     
          xhr.open('POST', '/uploadImage');        
          xhr.onload = function () {
            console.log('上传成功!');
          };
          xhr.send(formData);
        });
      }
    </script>
  </body>
</html>

注意:由于浏览器的安全性限制,不能直接使用XMLHttpRequest来上传文件。可以使用第三方库(如jQuery,axios等)或者formData的API来实现。

服务端代码示例(使用Node.js):

const express = require('express');
const app = express();
const port = 3000;

const bodyParser = require('body-parser');
app.use(bodyParser.json());

const fs = require('fs');

app.post('/uploadImage', (req, res) => { 
  const file = req.files.file;
  const savePath = './' + file.name;

  fs.copyFileSync(file.path, savePath);

  res.send('文件上传成功!'); 
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

以上是两个使用原生JS实现前端本地文件上传的示例,如有疑问可以参考更多相关的文档或资料。

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

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

相关文章

  • 深入探究JS中的异步编程和事件循环机制

    深入探究JS中的异步编程和事件循环机制 在JavaScript中,异步编程是必不可少的。它可以使我们的程序变得更加高效,同时也可以避免一些由于阻塞线程而导致的问题,比如用户界面的卡顿等。异步编程的核心机制就是事件循环,下面将详细探究JavaScript中的异步编程和事件循环机制。 异步编程 JavaScript是单线程的语言,这意味着它只有一个主线程来处理执…

    JavaScript 2023年5月28日
    00
  • 详解JavaScript常用的Hook脚本

    详解JavaScript常用的Hook脚本 什么是Hook脚本? 在编程中,Hook脚本指的是通过修改或者扩展程序中已定义的功能来实现新的功能或者增强原有功能的一种技术手段。JavaScript常用的Hook脚本主要是基于前端页面中的DOM元素和事件实现的。 Hook脚本的实现方法 Hook脚本的实现方法主要有两种:一种是利用浏览器提供的API来操作DOM元…

    JavaScript 2023年6月10日
    00
  • javascript获取select值的方法完整实例

    关于JavaScript获取Select的值,你可以按照下面的步骤实现: 第一步:获取Select元素 要获取Select元素,可以使用document.getElementById()方法,传入Select元素的ID作为参数,如下所示: let select = document.getElementById("mySelect"); …

    JavaScript 2023年6月10日
    00
  • 详解JS HTML Web端使用MQTT通讯测试

    下面是“详解JS HTML Web端使用MQTT通讯测试”的完整攻略: 一、MQTT介绍 即消息队列遥测传输(Message Queue Telemetry Transport,缩写为MQTT)是一个开放的物联网协议,由IBM于1999年开发。它是一个非常轻量的通讯协议,适合于各种网络连接条件下的物联网设备之间的消息通讯。同时,MQTT协议可以和HTTP和W…

    JavaScript 2023年5月27日
    00
  • JavaScript常规加密技术实现方式详解

    JavaScript常规加密技术实现方式详解 什么是加密技术? 在计算机科学中,加密技术是指将信息从一种形式转换为另一种形式,使得只有授权的人可以读取或理解信息。加密技术在计算机安全、金融、通信等领域得到广泛应用,目的是保护信息的机密性、完整性和可用性。 常见的加密技术 对称加密 对称加密是最基本的加密技术之一,它使用同一个密钥进行加密和解密。对称加密的优点…

    JavaScript 2023年5月19日
    00
  • 分享一个常用的javascript静态类

    好的!分享一个常用的JavaScript静态类,下面是详细的攻略: 什么是JavaScript静态类 JavaScript静态类是一个不需要实例化就能够直接调用其方法和属性的类。这个类的定义常常是使用ES6中的Class语法糖和静态方法(static method)或属性(static property)实现的。 例如: class Utils { stat…

    JavaScript 2023年6月11日
    00
  • 可以读取EXCEL文件的js代码第2/2页

    让我来为您详细讲解如何读取EXCEL文件的JS代码攻略。 一、安装依赖 要读取EXCEL文件,我们首先需要安装必要的依赖。请使用以下命令安装: npm install xlsx 二、导入模块 安装完依赖后,我们需要在JS文件中导入xlsx模块,以便使用其中的操作函数。请使用以下代码导入: const XLSX = require("xlsx&quo…

    JavaScript 2023年5月27日
    00
  • layui的表单验证支持ajax判断用户名是否重复的实例

    以下是使用layui实现表单验证并通过ajax判断用户名是否重复的攻略: 1. 准备工作 首先,需要在网页中引入layui的核心文件和layui的form模块。可以通过以下方式在HTML文档中引入layui的核心文件和form模块: <!– 引入layui核心文件 –> <script src="https://cdn.jsd…

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