原生JS实现文件上传

下面是“原生JS实现文件上传”的详细攻略:

1. HTML结构

在HTML文件中添加一个表单,包含一个文件输入和一个提交按钮。

<form enctype="multipart/form-data">
  <input type="file" name="fileInput" id="fileInput">
  <input type="button" value="上传" onclick="uploadFile()">
</form>

2. JS代码实现

使用XMLHttpRequest对象完成文件上传。代码如下:

function uploadFile() {
  var fileInput = document.getElementById('fileInput');
  var file = fileInput.files[0];
  if (!file) return; // 没有选择文件

  var xhr = new XMLHttpRequest();
  // 处理上传进度
  xhr.upload.onprogress = function(event) {
    var percent = 100 * event.loaded / event.total;
    console.log('上传进度:' + percent + '%');
  };
  // 当上传完成时调用
  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log('上传成功');
    }
  }
  xhr.onerror = function() {
    console.log('上传失败');
  }
  // 发送请求
  xhr.open('POST', '/upload', true);
  var formData = new FormData();
  formData.append('file', file);
  xhr.send(formData);
}

说明:
1. 获取input元素,并获取选中的文件。
2. 创建XMLHttpRequest对象。
3. 设置上传进度的回调函数。
4. 设置上传完成时的回调函数。
5. 设置上传失败时的回调函数。
6. 打开请求,设置POST方法和URL地址。
7. 创建FormData对象,将文件添加到表单数据中。
8. 发送请求。

3. 文件处理

文件上传完成后,服务器端需要接收文件并进行处理。这里给出Node.js的示例代码:

const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

//处理文件上传
app.post('/upload', upload.single('file'), function(req, res, next) {
  if (!req.file) {
    return res.status(400).send('请选择要上传的文件');
  }
  console.log(req.file.originalname + '上传成功');
  return res.send('文件上传成功');
});

app.listen(3000, function() {
  console.log('服务已启动,端口号:3000');
});

说明:
1. 引入express框架和multer文件上传中间件。
2. 创建multer的upload对象,指定文件保存的目录。
3. 创建路由处理文件上传请求。
4. 判断是否接收到文件。
5. 文件上传成功,将文件名打印到控制台。
6. 返回上传成功的响应信息。
7. 启动服务器并监听3000端口。

4. 示例说明

示例1

用户选择图片文件,上传到服务器。

输入为:一个图片文件,点击上传按钮。

输出为:上传成功,并将图片文件保存到服务器。

实现过程:
1. 在HTML页面中添加一个表单,包含一个文件输入和一个提交按钮。

<form enctype="multipart/form-data">
  <input type="file" name="fileInput" id="fileInput">
  <input type="button" value="上传" onclick="uploadFile()">
</form>
  1. 使用XMLHttpRequest对象完成文件上传。
function uploadFile() {
  var fileInput = document.getElementById('fileInput');
  var file = fileInput.files[0];
  if (!file) return; // 没有选择文件

  var xhr = new XMLHttpRequest();
  // 处理上传进度
  xhr.upload.onprogress = function(event) {
    var percent = 100 * event.loaded / event.total;
    console.log('上传进度:' + percent + '%');
  };
  // 当上传完成时调用
  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log('上传成功');
    }
  }
  xhr.onerror = function() {
    console.log('上传失败');
  }
  // 发送请求
  xhr.open('POST', '/upload', true);
  var formData = new FormData();
  formData.append('file', file);
  xhr.send(formData);
}
  1. 服务器端处理文件上传,并返回上传成功的响应信息。
const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

//处理文件上传
app.post('/upload', upload.single('file'), function(req, res, next) {
  if (!req.file) {
    return res.status(400).send('请选择要上传的文件');
  }
  console.log(req.file.originalname + '上传成功');
  return res.send('文件上传成功');
});

app.listen(3000, function() {
  console.log('服务已启动,端口号:3000');
});

示例2

用户选择文本文件,上传到服务器。

输入为:一个文本文件,点击上传按钮。

输出为:上传成功,并将文本文件保存到服务器。

实现过程:
1. 在HTML页面中添加一个表单,包含一个文件输入和一个提交按钮。

<form enctype="multipart/form-data">
  <input type="file" name="fileInput" id="fileInput">
  <input type="button" value="上传" onclick="uploadFile()">
</form>
  1. 使用XMLHttpRequest对象完成文件上传。
function uploadFile() {
  var fileInput = document.getElementById('fileInput');
  var file = fileInput.files[0];
  if (!file) return; // 没有选择文件

  var xhr = new XMLHttpRequest();
  // 处理上传进度
  xhr.upload.onprogress = function(event) {
    var percent = 100 * event.loaded / event.total;
    console.log('上传进度:' + percent + '%');
  };
  // 当上传完成时调用
  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log('上传成功');
    }
  }
  xhr.onerror = function() {
    console.log('上传失败');
  }
  // 发送请求
  xhr.open('POST', '/upload', true);
  var formData = new FormData();
  formData.append('file', file);
  xhr.send(formData);
}
  1. 服务器端处理文件上传,并返回上传成功的响应信息。
const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

//处理文件上传
app.post('/upload', upload.single('file'), function(req, res, next) {
  if (!req.file) {
    return res.status(400).send('请选择要上传的文件');
  }
  console.log(req.file.originalname + '上传成功');
  return res.send('文件上传成功');
});

app.listen(3000, function() {
  console.log('服务已启动,端口号:3000');
});

以上就是“原生JS实现文件上传”的完整攻略。希望对你有帮助。

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

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

相关文章

  • 5种方法告诉你如何使JavaScript 代码库更干净

    5种方法告诉你如何使JavaScript 代码库更干净 在开发 JavaScript 代码时,保持代码库干净是非常重要的。这可以提高代码的可读性和可维护性,使代码更易于维护。下面是几种方法可以帮助你保持 JavaScript 代码库的干净。 1. 使用严格模式 JavaScript 的 “use strict” 指令可以让代码在严格模式下执行。这种模式可以避…

    JavaScript 2023年6月11日
    00
  • 小议javascript 设计模式 推荐

    小议JavaScript设计模式 前言 JavaScript是一种弱类型、动态类型的解释性脚本语言,开发人员可以在编写代码的同时运行程序,这使得JavaScript成为了Web开发过程的重要组成部分。借助JavaScript设计模式,开发人员能够更加规范、优化自己的代码,提高代码的可维护性和可拓展性,使得自己称为一个优秀的程序员。 常见设计模式 Javasc…

    JavaScript 2023年6月10日
    00
  • IE8 新增的Javascript 开发接口说明

    IE8新增的Javascript开发接口说明 Internet Explorer 8(简称IE8)是微软公司开发的一款网页浏览器,它在Javascript开发接口方面新增了很多功能,本文将对其进行详细讲解。 1. IE8新增的Javascript开发接口说明 1.1. 跨文档消息传递 IE8中新增了window.postMessage方法,可以在不同的窗口(…

    JavaScript 2023年6月10日
    00
  • 改变checkbox默认选中状态及取值的实现代码

    下面我将为你详细讲解如何改变checkbox默认选中状态及取值的实现代码。 修改checkbox默认选中状态 通过HTML的checked属性 checkbox的默认选中状态可以通过HTML的checked属性来设置。该属性值为true时,checkbox为选中状态;为false时,checkbox为未选中状态。如下所示为一个未选中的checkbox: &l…

    JavaScript 2023年6月11日
    00
  • JavaScript 装逼指南(js另类写法)

    JavaScript 装逼指南(js另类写法) 简介 本文介绍了一些十分妙趣横生的 JavaScript 另类写法,可用于装逼或增加代码趣味性。 示例 1. 用递归函数实现累加器 const add = (n) => (n === 0 ? 0 : n + add(n – 1)); console.log(add(4)); // 10 这个累加器思路非常…

    JavaScript 2023年5月18日
    00
  • 新手入门带你学习JavaScript引擎运行原理

    新手入门带你学习JavaScript引擎运行原理 1. 前言 JavaScript语言已经成为web前端技术的必备语言之一,对于想进一步掌握JavaScript运行原理的同学,了解JavaScript引擎的运行机制是非常重要的。 本文将从以下几个方面进行介绍: JavaScript引擎的功能和作用 JavaScript引擎的基本原理 实战案例学习 2. Ja…

    JavaScript 2023年5月27日
    00
  • 鼠标事件延时切换插件

    鼠标事件延时切换插件攻略 插件介绍 鼠标事件延时切换插件是一款基于jQuery库实现的插件,可以实现在鼠标停留在某一元素上时,延时展示该元素的内容,并在鼠标离开该元素后,自动隐藏该元素的内容,从而提高页面的交互性。 插件使用方法 引入jQuery库和鼠标事件延时切换插件的js文件 <script src="https://cdn.bootcd…

    JavaScript 2023年6月11日
    00
  • JS验证字符串功能

    下面我将详细讲解“JS验证字符串功能”的完整攻略。 1. 概述 在 JavaScript 中,我们可以通过正则表达式来验证字符串的合法性。正则表达式是一种强大的字符串匹配工具,它可以用来检查一个字符串是否符合某种模式。通过使用正则表达式,我们可以实现各种复杂的字符串验证功能。 2. 正则表达式的语法 正则表达式由以下几个部分组成: 字符串字面量或 RegEx…

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