元素配合File API实现基础文件选择功能:
当前位置:首页 > JavaScript

js实现导入

2026-03-14 20:53:37JavaScript

文件导入基础实现

使用HTML的<input type="file">元素配合File API实现基础文件选择功能:

<input type="file" id="fileInput" />
<script>
  document.getElementById('fileInput').addEventListener('change', function(e) {
    const file = e.target.files[0];
    console.log('Selected file:', file.name, file.size, file.type);
  });
</script>

文本文件读取

通过FileReader对象读取文本文件内容:

const reader = new FileReader();
reader.onload = function(e) {
  const content = e.target.result;
  console.log('File content:', content);
};
reader.readAsText(file);  // file为之前获取的文件对象

Excel文件解析

使用xlsx库处理Excel文件:

import * as XLSX from 'xlsx';

function handleExcel(file) {
  const reader = new FileReader();
  reader.onload = function(e) {
    const data = new Uint8Array(e.target.result);
    const workbook = XLSX.read(data, {type: 'array'});
    const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
    const jsonData = XLSX.utils.sheet_to_json(firstSheet);
    console.log('Excel data:', jsonData);
  };
  reader.readAsArrayBuffer(file);
}

图片预览

实现图片上传预览功能:

function previewImage(file) {
  const reader = new FileReader();
  reader.onload = function(e) {
    const img = document.createElement('img');
    img.src = e.target.result;
    img.style.maxWidth = '300px';
    document.body.appendChild(img);
  };
  reader.readAsDataURL(file);
}

大文件分片上传

处理大文件上传的方案:

function uploadLargeFile(file) {
  const chunkSize = 1024 * 1024; // 1MB
  let offset = 0;

  while(offset < file.size) {
    const chunk = file.slice(offset, offset + chunkSize);
    const formData = new FormData();
    formData.append('file', chunk);
    formData.append('offset', offset);

    fetch('/upload', {
      method: 'POST',
      body: formData
    }).then(response => response.json());

    offset += chunkSize;
  }
}

拖拽上传实现

添加拖拽区域支持:

<div id="dropZone" style="border: 2px dashed #ccc; padding: 20px;">
  拖拽文件到此处
</div>
<script>
  const dropZone = document.getElementById('dropZone');

  dropZone.addEventListener('dragover', (e) => {
    e.preventDefault();
    dropZone.style.borderColor = 'blue';
  });

  dropZone.addEventListener('drop', (e) => {
    e.preventDefault();
    dropZone.style.borderColor = '#ccc';
    const files = e.dataTransfer.files;
    console.log('Dropped files:', files);
  });
</script>

文件类型验证

添加文件类型检查:

function validateFile(file, allowedTypes) {
  const fileType = file.type;
  const extension = file.name.split('.').pop().toLowerCase();

  return allowedTypes.includes(fileType) || 
         allowedTypes.includes(`.${extension}`);
}

// 使用示例
if(!validateFile(file, ['image/jpeg', '.png', 'application/pdf'])) {
  alert('不支持的文件类型');
}

进度显示

上传进度监控实现:

js实现导入

function uploadWithProgress(file) {
  const xhr = new XMLHttpRequest();
  xhr.upload.onprogress = function(e) {
    const percent = Math.round((e.loaded / e.total) * 100);
    console.log(`上传进度: ${percent}%`);
  };

  xhr.open('POST', '/upload', true);
  const formData = new FormData();
  formData.append('file', file);
  xhr.send(formData);
}

标签: js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…