元素获取用户选择的文件,通过FileReader对象读取文件内容: const fileInput = document.ge…">
当前位置:首页 > JavaScript

js实现文件

2026-01-31 17:14:20JavaScript

文件上传与读取

使用<input type="file">元素获取用户选择的文件,通过FileReader对象读取文件内容:

const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
  const file = event.target.files[0];
  const reader = new FileReader();

  reader.onload = (e) => {
    const content = e.target.result;
    console.log(content);
  };

  reader.readAsText(file); // 其他方法:readAsArrayBuffer, readAsDataURL
});

文件下载

通过创建Blob对象和URL对象实现文件下载:

function downloadFile(content, fileName, mimeType) {
  const blob = new Blob([content], { type: mimeType });
  const url = URL.createObjectURL(blob);

  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  document.body.appendChild(a);
  a.click();

  setTimeout(() => {
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  }, 100);
}

// 使用示例
downloadFile('Hello World', 'test.txt', 'text/plain');

文件切片上传

对于大文件可采用分片上传策略:

async function uploadInChunks(file, chunkSize = 1024 * 1024) {
  const totalChunks = Math.ceil(file.size / chunkSize);

  for (let i = 0; i < totalChunks; i++) {
    const start = i * chunkSize;
    const end = Math.min(start + chunkSize, file.size);
    const chunk = file.slice(start, end);

    const formData = new FormData();
    formData.append('chunk', chunk);
    formData.append('chunkIndex', i);
    formData.append('totalChunks', totalChunks);
    formData.append('fileName', file.name);

    await fetch('/upload', {
      method: 'POST',
      body: formData
    });
  }
}

文件拖放功能

实现拖放区域接收文件:

const dropArea = document.getElementById('dropArea');

dropArea.addEventListener('dragover', (e) => {
  e.preventDefault();
  dropArea.classList.add('dragover');
});

dropArea.addEventListener('dragleave', () => {
  dropArea.classList.remove('dragover');
});

dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  dropArea.classList.remove('dragover');

  const files = e.dataTransfer.files;
  if (files.length) {
    handleFiles(files);
  }
});

文件类型验证

验证文件扩展名和MIME类型:

function validateFile(file, allowedTypes) {
  const extension = file.name.split('.').pop().toLowerCase();
  const isValidExtension = allowedTypes.extensions.includes(extension);
  const isValidMime = allowedTypes.mimeTypes.includes(file.type);

  return isValidExtension && isValidMime;
}

// 使用示例
const valid = validateFile(file, {
  extensions: ['jpg', 'png'],
  mimeTypes: ['image/jpeg', 'image/png']
});

文件压缩

使用第三方库如compressor.js实现图片压缩:

new Compressor(file, {
  quality: 0.8,
  maxWidth: 800,
  success(result) {
    const compressedFile = new File([result], file.name, {
      type: result.type
    });
    // 处理压缩后的文件
  },
  error(err) {
    console.error(err.message);
  }
});

文件预览

实现图片/PDF等文件的预览功能:

function previewFile(file) {
  const preview = document.getElementById('preview');

  if (file.type.startsWith('image/')) {
    const img = document.createElement('img');
    img.src = URL.createObjectURL(file);
    preview.appendChild(img);
  } else if (file.type === 'application/pdf') {
    // 使用PDF.js等库处理PDF预览
  }
}

js实现文件

标签: 文件js
分享给朋友:

相关文章

css文件怎么制作

css文件怎么制作

创建CSS文件的基本步骤 CSS文件用于定义网页的样式,可以与HTML文件分离,便于管理和维护。以下是创建CSS文件的方法: 新建文本文件 使用任意文本编辑器(如Notepad++、VS Code、…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…