元素和FormData对象。以下是一个基础示例:
当前位置:首页 > JavaScript

js库文件上传js实现

2026-02-02 12:25:58JavaScript

文件上传的基本实现

使用原生JavaScript实现文件上传需要结合HTML的<input type="file">元素和FormData对象。以下是一个基础示例:

<input type="file" id="fileInput">
<button onclick="uploadFile()">上传文件</button>

<script>
function uploadFile() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (!file) {
    alert('请选择文件');
    return;
  }

  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));
}
</script>

使用第三方库实现

对于更复杂的需求,可以使用专门的文件上传库:

1. Dropzone.js

js库文件上传js实现

<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css">
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>

<div id="myDropzone" class="dropzone"></div>

<script>
Dropzone.options.myDropzone = {
  url: "/upload",
  paramName: "file",
  maxFilesize: 2, // MB
  acceptedFiles: "image/*,.pdf",
  addRemoveLinks: true
};
</script>

2. Uppy

<link href="https://releases.transloadit.com/uppy/v3.3.1/uppy.min.css" rel="stylesheet">
<script src="https://releases.transloadit.com/uppy/v3.3.1/uppy.min.js"></script>

<div id="drag-drop-area"></div>

<script>
const uppy = new Uppy.Core()
  .use(Uppy.Dashboard, {
    inline: true,
    target: '#drag-drop-area'
  })
  .use(Uppy.XHRUpload, {
    endpoint: '/upload'
  });
</script>

进度监控实现

原生JavaScript可以通过XMLHttpRequest监控上传进度:

js库文件上传js实现

function uploadWithProgress(file) {
  const xhr = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('file', file);

  xhr.upload.addEventListener('progress', (event) => {
    if (event.lengthComputable) {
      const percent = Math.round((event.loaded / event.total) * 100);
      console.log(`上传进度: ${percent}%`);
    }
  });

  xhr.open('POST', '/upload', true);
  xhr.send(formData);
}

多文件上传实现

处理多个文件上传需要对文件列表进行遍历:

function uploadMultipleFiles() {
  const fileInput = document.getElementById('multiFileInput');
  const files = fileInput.files;

  if (files.length === 0) {
    alert('请选择文件');
    return;
  }

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

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

文件验证处理

在客户端进行文件验证可以提升用户体验:

function validateAndUpload(file) {
  // 验证文件类型
  const allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
  if (!allowedTypes.includes(file.type)) {
    alert('不支持的文件类型');
    return false;
  }

  // 验证文件大小 (2MB限制)
  const maxSize = 2 * 1024 * 1024;
  if (file.size > maxSize) {
    alert('文件大小超过2MB限制');
    return false;
  }

  // 执行上传
  return true;
}

分块上传实现

对于大文件,可以实现分块上传:

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

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

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

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

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

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…