元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例:
当前位置:首页 > JavaScript

js 实现文件上传

2026-01-16 12:44:16JavaScript

文件上传的基本实现

使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例:

<input type="file" id="fileInput">
<button id="uploadButton">上传</button>
document.getElementById('uploadButton').addEventListener('click', function() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (file) {
    const formData = new FormData();
    formData.append('file', file);

    fetch('/upload', {
      method: 'POST',
      body: formData
    })
    .then(response => response.json())
    .then(data => console.log('上传成功:', data))
    .catch(error => console.error('上传失败:', error));
  }
});

多文件上传

通过添加multiple属性可以实现多文件选择:

js 实现文件上传

<input type="file" id="fileInput" multiple>
const fileInput = document.getElementById('fileInput');
const files = fileInput.files;

const formData = new FormData();
for (let i = 0; i < files.length; i++) {
  formData.append('files', files[i]);
}

进度显示

使用XMLHttpRequest可以获取上传进度:

const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);

xhr.upload.onprogress = function(e) {
  if (e.lengthComputable) {
    const percentComplete = (e.loaded / e.total) * 100;
    console.log(percentComplete + '% 已上传');
  }
};

xhr.onload = function() {
  console.log('上传完成');
};

xhr.send(formData);

文件预览

在上传前预览图片文件:

js 实现文件上传

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

  reader.onload = function(event) {
    const img = document.createElement('img');
    img.src = event.target.result;
    document.body.appendChild(img);
  };

  reader.readAsDataURL(file);
});

文件验证

验证文件类型和大小:

const file = fileInput.files[0];
const validTypes = ['image/jpeg', 'image/png'];
const maxSize = 2 * 1024 * 1024; // 2MB

if (!validTypes.includes(file.type)) {
  alert('仅支持JPEG和PNG格式');
  return;
}

if (file.size > maxSize) {
  alert('文件大小不能超过2MB');
  return;
}

拖放上传

实现拖放文件上传功能:

<div id="dropArea" style="border: 2px dashed #ccc; padding: 20px;">
  拖放文件到这里
</div>
const dropArea = document.getElementById('dropArea');

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

dropArea.addEventListener('dragleave', () => {
  dropArea.style.borderColor = '#ccc';
});

dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  dropArea.style.borderColor = '#ccc';

  const files = e.dataTransfer.files;
  if (files.length) {
    // 处理上传逻辑
  }
});

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

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

jquery 文件上传

jquery 文件上传

jQuery 文件上传实现方法 使用 jQuery 实现文件上传可以通过多种方式,以下是几种常见的实现方法: 使用原生 HTML5 和 jQuery AJAX 创建一个表单并处理文件上传: <…

vue js实现弹窗

vue js实现弹窗

Vue.js 实现弹窗的方法 使用组件实现弹窗 创建一个独立的弹窗组件,例如 Modal.vue,包含弹窗的 HTML 结构和样式。在组件中定义 props 控制弹窗的显示与隐藏。 <temp…

js实现vue组件

js实现vue组件

使用原生JavaScript实现类似Vue的组件功能 基础组件结构 创建一个简单的组件系统需要实现数据绑定、模板渲染和事件处理。以下是一个基础实现框架: class Component { co…

vue.js实现循环

vue.js实现循环

Vue.js 实现循环的方法 在 Vue.js 中,循环通常通过 v-for 指令实现,用于遍历数组或对象并渲染列表。以下是几种常见的循环实现方式: 遍历数组 使用 v-for 遍历数组时,可以获取…