原生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日

相关文章

  • javaScript语法总结

    JavaScript语法总结 1. 变量与数据类型 JavaScript的数据类型分为基本数据类型和引用数据类型。基本数据类型包括数字、字符串、布尔值、null和undefined,引用数据类型包括对象、数组和函数。 1.1 变量的声明 在JavaScript中,通过 var、let、const 关键字声明一个变量。 var 声明的变量为函数作用域,let …

    JavaScript 2023年5月17日
    00
  • js每隔两秒输出数组中的一项(实例)

    下面是讲解“js每隔两秒输出数组中的一项”的完整攻略,具体步骤如下: 1. 准备工作 在开始实现之前,我们需要明确几个问题: 哪个数组需要输出? 如何输出数组中的一项? 如何达到每隔两秒输出一项的效果? 针对以上问题,我们可以做如下解答: 这里假设我们要输出的数组是一个长度为n的一维数组 输出数组中的一项可以使用数组索引,即array[index]的形式来实…

    JavaScript 2023年5月27日
    00
  • js opener的使用详解

    JavaScript中的opener 在JavaScript中,window.opener是一个全局对象,它代表调用当前窗口的父窗口对象。即如果我们使用一个子窗口来打开一个页面,那么该页面中的window.opener就代表了该子窗口的父窗口对象。opener对象的使用非常灵活,提供了多种用法。下面我们来详细了解一下opener对象。 属性 window.o…

    JavaScript 2023年6月11日
    00
  • js日期时间格式化的方法实例

    我可以为您讲解一下“js日期时间格式化的方法实例”的攻略。 标题 介绍 在Web开发中,经常需要将日期时间格式化成特定的格式,比如需要将日期时间转换成“年-月-日 时:分:秒”的格式。JavaScript提供了一些工具方法,可以帮助我们完成这样的操作。 toLocaleDateString()方法 这个方法可以将日期时间格式化成标准的本地日期字符串。 使用示…

    JavaScript 2023年5月27日
    00
  • python的pip有什么用

    下面是关于“Python的pip有什么用”的详细攻略: 1. 什么是pip pip是Python语言中一个非常常用的包管理工具,用于安装和管理Python的第三方库。它可以自动下载、安装和更新Python库,大大方便了开发者的工作。pip已经是Python3.4及以后版本的标准库之一,不需要额外安装。 2. pip的使用 安装pip 如果你使用的Python…

    JavaScript 2023年5月28日
    00
  • JS利用map整合双数组的小技巧分享

    JS利用map整合双数组的小技巧是指通过使用map函数,把两个数组逐个对应元素整合成一个新的数组。下面是具体的步骤及示例: 1. 首先明确双数组整合的要求 如果我们有两个数组: const arr1 = [1, 2, 3]; const arr2 = [‘a’, ‘b’, ‘c’]; 我们希望将这两个数组逐个对应元素整合成一个新的数组,即得到: const …

    JavaScript 2023年6月10日
    00
  • JS获取几种URL地址的方法小结

    关于 “JS获取几种URL地址的方法小结”,我准备了如下的攻略: 1. 前言 在前端开发中,获取URL地址的能力是非常常见也非常重要的技能。 获取URL地址的方法也是多种多样的。 在本篇攻略中,我们会讲解JavaScript中获取URL地址的几个常用方法。 2. JavaScript获取URL地址的几种方法的小结 2.1. 通过window.location…

    JavaScript 2023年6月11日
    00
  • 9种使用Chrome Firefox 自带调试工具调试javascript技巧

    当我们开发JavaScript程序的时候,难免会遇到一些问题,这时候使用调试工具就是非常必要的。Chrome和Firefox浏览器都自带了调试工具,本文将详细讲解9种使用Chrome和Firefox自带调试工具调试JavaScript的技巧。 1. 加断点 在代码中加入断点是调试的入门级技巧。断点可以让程序在指定的语句处停下来,并可以查看当前的变量值以及执行…

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