原生JS实现文件上传

yizhihongxing

下面是“原生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日

相关文章

  • JavaScript中的闭包介绍

    一、什么是闭包 闭包是指能够访问其它函数内部变量的函数。在 JavaScript 中,函数是一等公民,即函数可以作为对象传递,也可以作为返回值返回。在函数中定义的变量也可以作为闭包的一部分,因此,当一个函数返回另一个函数时,闭包就会形成。 闭包的主要特点是可以访问外部函数作用域内的变量,即使外部函数已经返回了,这些变量的值也可以被访问和修改,因为这些变量仍然…

    JavaScript 2023年6月10日
    00
  • IP查询系统的异步回调案例

    IP查询系统的异步回调案例可以分为以下几个步骤: 1.向第三方IP查询系统发出请求,获取IP信息。 2.解析获取到的IP信息,提取需要的数据。 3.对提取到的数据进行存储和处理。 4.将处理完成后的数据通过异步回调的方式返回给用户。 以下是详细的攻略: 第一步:请求IP信息 在代码中,这一步可以使用HTTP请求库向第三方IP查询系统发起GET请求,获取用户输…

    JavaScript 2023年5月28日
    00
  • JS实现json对象数组按对象属性排序操作示例

    讲解“JS实现json对象数组按对象属性排序操作示例”的完整攻略,大致分为以下步骤: 1.准备JSON对象数组数据首先,我们需要准备一组JSON对象数组数据。例如,假设我们要对一个用户列表进行排序,我们可以定义一个包含多个用户信息的数组,每个用户信息都是一个JSON对象。示例代码如下: var users = [ { name: "张三"…

    JavaScript 2023年5月27日
    00
  • Vue封装一个Tabbar组件 带组件路由跳转方式

    下面就来详细讲解如何用Vue封装一个Tabbar组件并带有组件路由的跳转方式。 一、准备工作 在开始编写代码之前,需要先安装Vue以及Vue Router等组件。具体步骤如下: 安装Vue.js npm install vue -S 安装Vue Router npm install vue-router -S 二、编写Tabbar组件 下面我们开始编写Tab…

    JavaScript 2023年6月11日
    00
  • JavaScript函数表达式详解及实例

    JavaScript函数表达式详解 在JavaScript中,函数是一等公民,也就是说函数可以像其他变量一样被赋值、传参等操作。函数表达式是一种定义函数的方式,下面我们来详细讲解函数表达式。 函数表达式的语法 函数表达式的语法如下: var myFunction = function(arg1, arg2, …) { //函数体 }; 其中,myFunc…

    JavaScript 2023年5月27日
    00
  • Js 时间间隔计算的函数(间隔天数)

    下面我来详细讲解“Js 时间间隔计算的函数(间隔天数)”的完整攻略。 1. 需求分析 首先,我们需要明确这个函数的具体需求。根据题目,我们需要实现一个函数来计算两个日期之间的间隔天数。例如,对于输入的日期字符串 “2021-01-01” 和 “2021-01-05″,函数应该返回 4。 2. 时间格式转换 首先,我们需要将日期字符串转换成 JavaScrip…

    JavaScript 2023年5月27日
    00
  • JavaScript 经典实例日常收集整理(常用经典)

    “JavaScript 经典实例日常收集整理(常用经典)” 是一份经典的 JavaScript 实例集合,本文将为大家提供一份完整攻略,帮助你理解它的用法和功能。 简介 “JavaScript 经典实例日常收集整理(常用经典)” 是一份在线的代码集合,包含了许多常见的 JavaScript 实例。这些实例涵盖了从基础入门到高级应用的方方面面,非常适合初学者学…

    JavaScript 2023年5月18日
    00
  • 获取当前网页document.url location.href区别总结

    获取当前网页的URL是常见的前端操作,常用的方法有两种:document.URL和location.href。 document.URL document.URL 属性返回当前文档的URL。 它与 location.href 属性非常相似,但有一些细微的区别。 document.URL 是只读的,而 location.href 是可读可写的。 以下是一个返回…

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