原生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作用域链、执行上下文与闭包”的完整攻略。 一、作用域链 作用域是指程序中的变量能够被访问的范围。JavaScript采用的是词法作用域,也就是在定义变量时就确定了变量的作用域。作用域链就是由当前执行环境与其上层环境的变量对象组成的链表。在查找变量时,会沿着这个链表一级一级地向上查找,直到找到为止。如果最终还没有…

    JavaScript 2023年6月10日
    00
  • 浅谈JS正则表达式的RegExp对象和括号的使用

    浅谈JS正则表达式的RegExp对象和括号的使用 正则表达式是一种用来精确匹配字符串的工具,而JavaScript中的RegExp对象可以帮助我们在代码中使用正则表达式。 RegExp对象 在JavaScript中,RegExp对象可以通过构造函数创建: // 创建正则表达式 const regex = new RegExp(‘ab+c’); // 或者 c…

    JavaScript 2023年6月10日
    00
  • JS 添加网页桌面快捷方式的代码详细整理

    下面是“JS 添加网页桌面快捷方式的代码详细整理”的完整攻略。 什么是网页桌面快捷方式 网页桌面快捷方式指的是在计算机桌面上创建的一个链接,可以直接打开指定网页。用户只需点击桌面图标即可快速访问网页,无需打开浏览器、输入网址等操作。 实现方式 要在网页中添加桌面快捷方式,需要使用JavaScript。下面是整个实现过程的步骤: 首先,需要判断浏览器是否支持该…

    JavaScript 2023年5月27日
    00
  • javascript中递归的两种写法

    当我们需要重复执行相同的任务时,递归是一种非常有效的解决方案。在JavaScript中,递归有两种主要的写法,分别是普通递归和尾递归。本文将详细讲解这两种递归的写法。 什么是递归 递归是一种编程技巧,它是通过一个函数调用自身来完成某个任务的过程。递归有两个特征: 基线条件:递归过程中,必须有一个基准条件(或称终止条件),它告诉递归函数何时停止执行。 递归条件…

    JavaScript 2023年6月10日
    00
  • javascript 获取url参数的正则表达式(用来获取某个参数值)

    获取URL参数一直是前端开发的一个常见操作,JavaScript提供了多种方式来实现获取URL参数的功能,其中正则表达式是较为灵活且简单的一种方式。下面是获取URL参数的正则表达式及相应的代码示例: 正则表达式 以下正则表达式可以用来获取某个参数值: function getQueryString(name) { var reg = new RegExp(‘…

    JavaScript 2023年6月10日
    00
  • js tab效果的实现代码

    让我们来详细讲解”js tab效果的实现代码”的完整攻略。 1. 理解Tab切换效果 Tab切换效果是指点击页面上的不同标签页,页面的显示内容随之改变,以达到切换页面内容的效果。我们通过JavaScript来实现这种效果,通常包含以下几个部分: 标签栏:包含多个标签的容器 内容栏:多个不同的内容页,与标签一一对应 切换函数:用于实现标签栏的点击事件,实现标签…

    JavaScript 2023年6月10日
    00
  • javascript中contains是否包含功能实现代码(扩展字符、数组、dom)

    JavaScript中的contains方法用于检查一个字符串、数组或DOM元素是否包含指定内容。它会在传入的字符串、数组或DOM元素中查找指定内容,如果找到则返回true,否则返回false。 下面我将为您提供在不同场景下实现contains功能的完整攻略。 使用ECMAScript 6中的includes方法实现contains 在ECMAScript …

    JavaScript 2023年6月10日
    00
  • javascript 循环读取JSON数据的代码

    让我来为大家详细讲解“javascript 循环读取JSON数据的代码”的完整攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON数据格式可以表示数字、字符串、布尔值、对象、数组等类型的数据,用于存储和交换数据。 如何读取JSON数据 读取JSO…

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